简单工厂模式与工厂方法模式
简单工厂模式,又称静态工厂方法模式。由一个工厂类根据传入的参量决定创建出哪一种具体产品类的实例。
消费者只知道需要哪一种产品类,具体的实例化工作由工厂类完成。即消费者只阐明需求,具体工作由工厂类完成。产品模块由产品的抽象层----接口和具体实现类组成。故简单工厂模式的角色有工厂角色、抽象产品角色以及具体产品角色。(如图)
工厂角色是该模式的核心。往往由一个具体的java类实现。
抽象产品角色是创建对象的父类或超类。往往由抽象类或接口组成。
具体产品角色是所有创建的具体对象,有一个具体java类担任。
工厂类的具体实现:
public class Creater {
/*
静态工厂方法
*/
public static Productfactory() {
return new ConcreteProduct();
}
}
模式的核心是工厂类,这个类含有必要的判断逻辑,可以决定在省么时候创建那一个产品类的实例,而客户端则可以免除直接创建产品对象的责任,而仅仅负责消费产品。这种做法实现了对责任的分割。
模式以不变(一个工厂类)应万变(产品类的变化),未能很好的满足“开-闭”原则。当产品类增加时,工厂类也必须改变。
具体实例:SAX2库中的XMLReaderFactory类
简单工厂模式和工厂方法模式都是类的创建模式。工厂方法模式是对简单工厂模式的进一步完善(改进),又叫多态性工厂模式。该模式对工厂类进一步抽象化,形成工厂等级结构,与产品等级结构对应。模式中具体包含以下4中角色:
抽象工厂角色(该角色是模式的核心,所有具体工厂类必须继承该抽象类或实现该接口。)、具体工厂角色(具体的工厂类。)、抽象产品角色、具体产品角色。
客户端创建工厂对象,然后调用工厂对象的工厂方法创建产品对象。
具体实现:
public interface Creator {
publicProduct factory();
}
具体实例:在java聚集中的应用。所有的java聚集都实现了Collection接口,该接口规定所有的聚集必须提供一个iterator()方法,返回一个Iterator类型的对象。一个具体的java聚集对象,会通过这个方法返回一个具体的Iterator类对象。