设计模式--创建模式--工厂方法模式--java
来源:互联网 发布:同城网络app 编辑:程序博客网 时间:2024/06/07 18:14
intent
•Define an interface for creating an object, but letsubclasses decide which class to instantiate. Factory Method lets a class deferinstantiation to subclasses.
•为创建对象创建一个接口,使得创建哪一个对象让子类来干。
Applicability
•a class can't anticipate the class of objects it mustcreate.
•一个类不确定他所必须创建的对象中的哪一个。
•A class wants its subclasses to specify the objects itcreates
•一个类需要他的子类来确定创建哪一种对象。
•classes delegate responsibility to one of several helpersubclasses, and you want to localize the knowledge of which helper subclass isthe delegate.
•将创建哪一个对象的职能委托给子类,并且希望这些职能集中委托给一个子类。
Consequences
•在工厂方法内部生成对象要比直接生成对象更灵活。
•连接平行的类层次关系。
UML
工厂方法与简单工厂相比有何区别?
•多了一个工厂方法的接口。
•工厂方法可以支持多态,意味着将创建哪一个对象推迟到了子类。
Example --- iterator
Collection接口里有一个方法Iterator,ArrayList、LinkedList实现此接口,对于ArrayList和LinkedList都会返回各自的Iterator对象。
对于此Collection.iterator方法就是工厂方法。
而ArrayList和LinkedList返回具体的产品。
对于上述,JDK中和此不一样,在此主要是抽象出来用于讲解,细节方法可以阅读JDK中的源码,理清之间的关系。
另外Iterator是迭代模式。
•Collection.Iterator()是工厂方法角色
•Collection是抽象Creator角色。
•Iterator是抽象产品角色。
•Itr(可查阅jdk源码)是具体产品角色。(实际上在Itr中用到了模板方法模式,有兴趣可以查阅源码进行分析)。
Example -- toString
•对象信息字串会根据自身的需求来进行拼凑组合。等同于将toString创造的对象信息字串推迟在了子类中实现。
•toString就是FactoryMethod。
•Object就是抽象Creator。
•toString返回的String对象就是产品。
工厂方法与五项基本原则
•符合开闭原则。
•当多个产品等级结构出现时,工厂方法经无法满足需求。
Iterator、toString是否是模板模式?
- 设计模式--创建模式--工厂方法模式--java
- java 设计模式-创建模式之工厂方法模式1
- java 设计模式-创建模式之工厂方法模式2
- java设计模式 -------- 创建模式 之 工厂方法模式
- java设计模式之创建型模式-工厂方法模式
- JAVA设计模式创建型模式之工厂方法
- java设计模式之创建型模式-FactoryMethod ( 工厂方法 )
- java设计模式(创建型)之工厂方法模式
- 设计模式--创建模式--工厂方法
- 设计模式-创建型模式-工厂方法
- 【设计模式】创建型模式-工厂方法
- java设计模式--工厂方法设计模式
- JAVA设计模式学习之----创建模式:工厂模式(工厂方法)
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(24):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(01_1):创建型-工厂模式【工厂方法模式】(Factory Method)
- Java设计模式之创建型模式--工厂方法及抽象工厂模式
- 每天工作4小时的程序员
- 使用lwip协议的Raw API工作模式
- 事件Event
- Hibernate关系映射:单向多对多映射
- JS动态引入js,CSS——动态创建script/link/style标签
- 设计模式--创建模式--工厂方法模式--java
- 模拟前端AFE
- Android 隐藏、关闭软键盘
- 常用网络协议栈比较
- JNDI 查询 AD
- 新员工学习的技术
- 哈夫曼编码的C语言实现
- 使用aspnet_regsql.exe生成Memebership对应的数据库
- iOS 开发实例