工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂模式,和抽象工厂模式。这次说明的抽象工厂模式。
定义产品接口
public interface Product { void show(); }定义抽象A类产品
public abstract class ProductA implements Product { }定义一级的A类产品ProductA1
public class ProductA1 extends ProductA{ @Override public void show() { System.out.println("ProductA1 is showing"); } }定义二级的A类产品ProcuctA2
public class ProductA2 extends ProductA { @Override public void show() { System.out.println("ProductA2 is showing"); } }定义抽象的B类产品ProductB
public abstract class ProductB implements Product { }定义一级的B类产品ProductB1
public class ProductB1 extends ProductB{ @Override public void show() { System.out.println("ProductB1 is showing"); } }定义二级的B类产品B2
public class ProductB2 extends ProductB{ @Override public void show() { System.out.println("ProductB2 is showing"); } }定义工厂类接口,工厂类可以创建所以的产品的同一等级
public interface Factory { ProductA createProductA(); ProductB createProductB(); }定义一个只创建一级产品的工厂
public class Factory1 implements Factory{ @Override public ProductA createProductA() { return new ProductA1(); } @Override public ProductB createProductB() { return new ProductB1(); } }定义一个只创建二级产品的工厂
public class Factory2 implements Factory{ @Override public ProductA createProductA() { return new ProductA2(); } @Override public ProductB createProductB() { return new ProductB2(); } }定义场景类 这里场景类是创建了工厂1和工厂2,跟工厂指明需要创建产品A和产品B,具体的一类工厂则创建的是一类的产品A和产品B.而工厂2创建的是二类的产品A和产品B.
public class Client { public static void main(String[] args) { Factory factory1 = new Factory1(); Factory factory2 = new Factory2(); factory1.createProductA().show(); factory1.createProductB().show(); factory2.createProductA().show(); factory2.createProductB().show(); } }抽象工厂模式在新增一个产品时,需要修改所有的工厂。而在需要新增一个产品等级时,则只需要扩展新的工厂即可。因此适合在产品相对确定,产品的等级会增加的情形。
