java设计模式-工厂模式
2017-10-02 16:16
344 查看
工厂模式分类:
1. 简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
简单工厂模式例子
car接口:
奥迪厂商 ADCar:
宝马厂商BMWCar:
工厂类:
SimpleFactory:
简单工厂模式缺点:当新增一个产品(比如 奥拓),那么 工厂就要添加一个if判断语句,这就 违背了对内修改关闭原则。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
该模式中包含的角色及职责:
工厂(Creator)角色:它是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需要的产品对象。
抽象产品角色:它负责描述所有实例所共有的公共接口。
具体产品角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
使用场景:负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象的逻辑不关心;容易违反高内聚责任分配原则,所以只在很简单的情况下应用;
工厂方法模式:将工厂抽象出来(工厂有具体的工厂类)
将上个例子的工厂抽象出来如下
奥迪工厂:
宝马工厂:
优点:符合对内修改关闭,如果还有别的车(比如 奥拓),如果接入奥拓车系,不需要改变之前的代码
工厂方法模式是简单工厂方法模式的衍生,它的核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,使得系统可以在不修改具体工厂角色的情况下引用新的产品。
工厂方法模式是最典型的模板方法模式(Template Method Pattern)应用。
该模式中包含的角色及职责:
抽象工厂(Creator)角色:工厂方法模式的核心,任何在模式中创建的对象的工厂必须实现这个接口。
具体工厂(Concrete Creator)角色:实现抽象工厂接口的具体工厂类,包含应用程序的逻辑。
抽象产品(Product)角色:产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:实现了抽象产品角色定义的接口,其具体产品有专门的具体工厂创建。
使用场景:
对于某个产品,调用者清楚知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来;
只是需要一种产品,对于那个工厂生产的并不关心,最终选用哪个具体工厂由生产者一方决定,它根据当前系统的情况来实例化一个具体的工厂返回给使用者,这个决策过程对于使用者来说是透明的。
抽象工厂模式:
个人柑橘,就是在工厂方法的基础上进行产品行扩张,比如 在上个例子中的Factory接口里,在添加另外一个或者多个产品的接口
1. 简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
简单工厂模式例子
car接口:
/** * Description:车的接口 * User: lc * Date: 2017/10/2 0002 * Time: 下午 3:48 */ public interface Car { /** * 生成车 * @return */ String createCar(); }
奥迪厂商 ADCar:
/** * Description:奥迪厂商 * User: lc * Date: 2017/10/2 0002 * Time: 下午 3:48 */ public class ADCar implements Car { @Override public String createCar() { return "奥迪厂商:奥迪车"; } }
宝马厂商BMWCar:
/** * Description:宝马厂商 * User: lc * Date: 2017/10/2 0002 * Time: 下午 3:47 */ public class BMWCar implements Car { @Override public String createCar() { return "宝马厂商:宝马车"; } }
工厂类:
SimpleFactory:
/** * Description:简单工厂模式 * User: lc * Date: 2017/10/2 0002 * Time: 下午 3:45 */ public class SimpleFactory { public Car createCar(String factoryCarName) { if ("BMW".equals(factoryCarName)) { car = new BMWCar(); } else if ("AD".equals(factoryCarName)) { return new ADCar(); } else { System.out.println("目前没有别的工厂啦......"); return null; } return car; } }
简单工厂模式缺点:当新增一个产品(比如 奥拓),那么 工厂就要添加一个if判断语句,这就 违背了对内修改关闭原则。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
该模式中包含的角色及职责:
工厂(Creator)角色:它是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需要的产品对象。
抽象产品角色:它负责描述所有实例所共有的公共接口。
具体产品角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
使用场景:负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象的逻辑不关心;容易违反高内聚责任分配原则,所以只在很简单的情况下应用;
工厂方法模式:将工厂抽象出来(工厂有具体的工厂类)
将上个例子的工厂抽象出来如下
/** * Description:工厂的接口 * User: lc * Date: 2017/10/2 0002 * Time: 下午 3:48 */ public interface Factory { /** * 生成车 * @return */ Car createCar(); }
奥迪工厂:
/** * Description:奥迪工厂 * User: lc * Date: 2017/10/2 0002 * Time: 下午 4:46 */ public class ADFactory implements Factory { @Override public Car createCar() { return new ADCar(); } }
宝马工厂:
/** * Description:宝马工厂 * User: lc * Date: 2017/10/2 0002 * Time: 下午 4:47 */ public class BMWFactory implements Factory { @Override public Car createCar() { return new BMWCar(); } }
优点:符合对内修改关闭,如果还有别的车(比如 奥拓),如果接入奥拓车系,不需要改变之前的代码
工厂方法模式是简单工厂方法模式的衍生,它的核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,使得系统可以在不修改具体工厂角色的情况下引用新的产品。
工厂方法模式是最典型的模板方法模式(Template Method Pattern)应用。
该模式中包含的角色及职责:
抽象工厂(Creator)角色:工厂方法模式的核心,任何在模式中创建的对象的工厂必须实现这个接口。
具体工厂(Concrete Creator)角色:实现抽象工厂接口的具体工厂类,包含应用程序的逻辑。
抽象产品(Product)角色:产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:实现了抽象产品角色定义的接口,其具体产品有专门的具体工厂创建。
使用场景:
对于某个产品,调用者清楚知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来;
只是需要一种产品,对于那个工厂生产的并不关心,最终选用哪个具体工厂由生产者一方决定,它根据当前系统的情况来实例化一个具体的工厂返回给使用者,这个决策过程对于使用者来说是透明的。
抽象工厂模式:
个人柑橘,就是在工厂方法的基础上进行产品行扩张,比如 在上个例子中的Factory接口里,在添加另外一个或者多个产品的接口
相关文章推荐
- java设计模式—工厂模式
- java设计模式—工厂模式三种
- 学习:java设计模式—工厂模式
- 【java设计模式】(4)---工厂模式(案例解析)
- Java——设计模式——工厂模式
- Java-设计模式-第四篇-工厂模式
- 二Java设计模式——工厂模式
- java设计模式--工厂模式
- JAVA 设计模式-工厂模式
- Java 设计模式—工厂模式(三种方式)
- java设计模式—工厂模式
- java设计模式之一工厂模式(Factory Method)
- java设计模式之一工厂模式(Factory Method)
- java设计模式——工厂模式
- JAVA设计模式之---工厂模式
- java23种设计模式之一——工厂模式
- Java 设计模式情景分析——工厂模式
- Java设计模式——工厂模式
- 学习:java设计模式—工厂模式
- java设计模式—工厂模式