工厂方法模式
1、模式结构
工厂方法模式组成部分:
①抽象工厂:提供创建产品的接口,调用者通过访问具体工厂的工厂方法newProduct()来完成产品的创建;
②具体工厂:实现抽象工厂的抽象方法,完成具体产品的创建;
③抽象产品:定义的产品的属性和功能;
④具体产品:实现了抽象产品的接口,由具体工厂负责创建。
工厂方法模式的主要优点有:
- 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
- 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;
- 每个具体工厂只负责一个对应产品的生产。
工厂模式的实现示例代码:
package newcoder.FactoryDesignModel; interface abstractFactory{ // 抽象工厂 public abstractProduct newProduct(); } interface abstractProduct{ // 抽象产品 public void show(); } class concreteProduct1 implements abstractProduct{ // 具体产品 public concreteProduct1(){ System.out.println("concreteProduct1被创建"); } public void show(){ System.out.println("展示产品1"); } } class concreteProduct2 implements abstractProduct{ // 具体产品 public concreteProduct2(){ System.out.println("concreteProduct2被创建"); } public void show(){ System.out.println("展示产品2"); } } class concreteFactory1 implements abstractFactory{ // 具体工厂 public abstractProduct newProduct(){ return new concreteProduct1(); } } class concreteFactory2 implements abstractFactory{ // 具体工厂 public abstractProduct newProduct(){ return new concreteProduct2(); } } public class FactoryTest { public static void main(String args[]){ abstractFactory f1 = new concreteFactory1(); abstractProduct a = f1.newProduct(); a.show(); abstractFactory f2 = new concreteFactory2(); abstractProduct b = f2.newProduct(); b.show(); } }
抽象工厂方法
工厂方法模式中,只考虑生产同级的产品,抽象工厂模式将考虑多等级产品的生产。在一个工厂中,不仅能够生产洗衣机,也可以生产空调。
1、模式的结构
①抽象工厂:提供创建产品的接口,调用者通过访问具体工厂的工厂方法newProduct()来完成产品的创建;
②具体工厂:实现抽象工厂的抽象方法,完成具体产品的创建;
③抽象产品:定义的产品的属性和功能;
④具体产品:实现了抽象产品的接口,由具体工厂负责创建。同具体工厂之间的关系是多对一。
抽象工厂模式实现的示例代码:
package newcoder.FactoryDesignModel; interface ABstractFactory{ public electrictProduct newelectrictProduct(); public smartProduct newsmartProduct(); } interface electrictProduct{ public void show1(); } interface smartProduct{ public void show2(); } class computer implements smartProduct{ public computer(){ System.out.println("电脑被生产了"); } public void show2(){ System.out.println("展示电脑"); } } class phone implements smartProduct{ public phone(){ System.out.println("手机被生产了"); } public void show2(){ System.out.println("展示手机"); } } class airCondition implements electrictProduct{ public airCondition(){ System.out.println("空调被生产了"); } public void show1(){ System.out.println("展示空调"); } } class cleaMechanic implements electrictProduct{ public cleaMechanic(){ System.out.println("洗衣机被生产了"); } public void show1(){ System.out.println("展示洗衣机"); } } class haierFactory implements ABstractFactory{ public electrictProduct newelectrictProduct(){ return new airCondition(); } public smartProduct newsmartProduct(){ return new phone(); } } class geliFactory implements ABstractFactory{ public electrictProduct newelectrictProduct(){ return new cleaMechanic(); } public smartProduct newsmartProduct(){ return new computer(); } } public class Test { public static void main(String args[]){ ABstractFactory f1 = new haierFactory(); ABstractFactory f2 = new geliFactory(); electrictProduct a = f1.newelectrictProduct(); smartProduct b = f1.newsmartProduct(); electrictProduct c = f2.newelectrictProduct(); smartProduct d = f2.newsmartProduct(); } }