设计模式-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,一个对象使用完之后,并不需要立即释放,工厂类保持其状态,以便再次被使用。
相关文章推荐
- C++设计模式02——工厂方法模式
- C#设计模式之工厂模式(Factory)--02 工厂方法模式(Factory Method)
- 设计模式系列02:工厂方法模式
- Java与设计模式(02)--工厂方法模式
- 设计模式(Design Patterns)-可复用面向对象软件的基础 02:工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)
- JAVA设计模式-02-工厂方法模式
- 设计模式之02工厂方法模式(笔记)
- 设计模式02 -工厂方法模式
- .NET设计模式(2): 工厂方法模式
- Java设计模式——创建型模式——工厂方法模式(Factory METHOD Pattern)
- 第二篇 设计模式--工厂方法模式
- 设计模式java——工厂方法模式
- 23种设计模式(2):工厂方法模式
- 设计模式学习笔记-工厂方法模式
- 设计模式--工厂方法模式
- JAVA设计模式 —工厂方法模式(Factory Method)
- C++设计模式——工厂方法模式
- C#--设计模式之工厂方法模式
- 【JS设计模式】温习简单工厂模式、工厂方法模式、抽象工厂模式概念
- 【设计模式】工厂方法模式(Factory Method)