设计模式--创建模式--工厂方法模式--java
intent
•Define an inte易做图ce 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 ,