聊聊设计模式的抽象工厂模式

tech2026-10-07  16

介绍

工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂模式,和抽象工厂模式。这次说明的抽象工厂模式。

结构

定义一个产品类接口定义抽象的产品类,下属有不同的产品等级定义一个工厂类定义具体的工厂实现类,每个实现类可以创建同一个等级的所有产品。

类图结构

实现

定义产品接口

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(); } }

优缺点

抽象工厂模式在新增一个产品时,需要修改所有的工厂。而在需要新增一个产品等级时,则只需要扩展新的工厂即可。因此适合在产品相对确定,产品的等级会增加的情形。

最新回复(0)