工厂方法模式
工厂方法模式的主要优点有:
解决简单工厂模式的缺点:
工厂方法模式把具体产品的创建推迟到工厂类的子类(具体工厂)中,
此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,
这样工厂方法模式在添加新产品的时候就不修改工厂类逻辑而是添加新的工厂子类,
符合开放封闭原则,克服了简单工厂模式中缺点
缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。
抽象工厂(Abstract Factory):
提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
具体工厂(ConcreteFactory):
主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
抽象产品(Product):
定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):
实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
1 //外界通过调用具体工厂类的方法,从而创建不同具体产品类的实例 2 public class Factory { 3 public static void main(String[] args) { 4 Factory0 factory1 = new Factory1(); 5 Produce manufacture1 = factory1.Manufacture(); 6 manufacture1.show(); 7 Factory0 factory2 = new Factory2(); 8 Produce manufacture2 = factory2.Manufacture(); 9 manufacture2.show(); 10 } 11 } 12 13 //抽象产品 14 abstract class Produce { 15 public abstract void show(); 16 } 17 18 //具体产品 19 class Produce1 extends Produce { 20 @Override 21 public void show() { 22 System.out.println("产品一"); 23 } 24 } 25 26 class Produce2 extends Produce { 27 @Override 28 public void show() { 29 System.out.println("产品二"); 30 } 31 } 32 33 //抽象工厂 34 abstract class Factory0 { 35 public abstract Produce Manufacture(); 36 } 37 38 //具体工厂 39 class Factory1 extends Factory0 { 40 41 @Override 42 public Produce Manufacture() { 43 return new Produce1(); 44 } 45 } 46 47 class Factory2 extends Factory0 { 48 49 @Override 50 public Produce Manufacture() { 51 return new Produce2(); 52 } 53 }