您的位置:首页 > 其它

设计模式-02-工厂方法模式的剖析

2013-05-09 00:47 232 查看

设计模式-02-工厂方法模式的剖析

本文主要参见自《Java与模式》另外还有《设计模式之禅》
一、定义

1.将实际创建工作推迟到工厂接口的子类中。

二、简单工厂的优缺点

1.开闭原则支持的不够:客户端支持开闭原则,但是工厂本身不支持开闭原则。如果有新的产品过来,就需要相应的修改工厂类。

三、工厂方法模式的引进

1.工厂方法模式是简单工厂模式的进一步抽象和改进,工厂模式克服了简单工厂开比原则支持不够的问题。
2.核心的工厂类,不再负责所有产品的创建,将具体的创建工作交给子类,核心类变成了抽象工厂角色。
3.允许在不修改具体工厂角色的情况下引入新的产品。
4.通常首先有产品角色,然后有工厂角色,也就是说,通常按照产品的等级结构设计一个同结构的工厂等级结构。

五、UML图

1.类图



2.时序图



六、角色

1.抽象工厂类
2.具体工厂类
3.抽象产品类
4.具体产品类

七、code实现
1.抽象工厂类

package com.jue.dp;

public interface IFactory {

	IProduct newInstance();
}


2.具体工厂类

package com.jue.dp;

public class ConcreteFactoryA implements IFactory {

	@Override
	public IProduct newInstance() {
		return new ConcreteProductA();
	}

}


package com.jue.dp;

public class ConcreteFactoryB implements IFactory {

	@Override
	public IProduct newInstance() {
		return new ConcreteProductB();
	}

}


3.抽象产品类

package com.jue.dp;

public interface IProduct {

	void display();

}


4.具体产品类

package com.jue.dp;

public class ConcreteProductA implements IProduct {

	@Override
	public void display() {
		System.out.println("ConcreteProductA->display");
	}

}


package com.jue.dp;

public class ConcreteProductB implements IProduct {

	@Override
	public void display() {
		System.out.println("ConcreteProductB->display");
	}

}


5.测试类

package com.jue.dp;

public class MainClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		IFactory fa = new ConcreteFactoryA();
		IProduct pa = fa.newInstance();
		pa.display();
	}

}


八、优点

1.符合开闭原则,如果系统需要添加一个新的产品,那么需要的就是向系统中添加一个产品类及他所对应的具体工厂。扩展优秀。
2.屏蔽了产品类的创建 。

九、缺点

1.过多的产品可能引起类膨胀。

十、使用场景

1.不关心对象的创建过程,直关心创建的物件,以及消费物件。
2.使用灵活的,可扩展的框架时,可以考虑使用工厂方法模式。

十一、在 java中的应用

1.Collection与Iterator接口



2.URL与URLConnection的应用



时序图如下:



十二、工厂方法模式的扩展

1.退化为简单工厂模式:一个模块尽需要一个工厂类,没有必要将它生产出来,直接使用静态的方法就可以。
2.Cache,一个对象使用完之后,并不需要立即释放,工厂类保持其状态,以便再次被使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: