设计模式-抽象工厂

简介: 设计模式-抽象工厂

设计模式-抽象工厂


意图


抽象工厂提供一个接口,用来创建相关的对象家族,而不是和工厂方法一样,创建一个对象。


抽象工厂


抽象工厂模式的各个角色:

  • 抽象工厂角色(Factory),工厂方法模式的核心,是具体工厂角色必须实现的接口或者必须继承父类。在 Java 类中他是抽象类或者接口来实现的。
  • 具体工厂角色(ConcreteFactory),这个是实现抽象工厂接口的具体工厂类。
  • 抽象产品角色(Product):抽象工厂模式所创建对象的基类,也就是产品对象共同父类。
  • 具体产品角色(ConcreteProduct),这个角色实现了抽象产品橘色所定义的接口。

抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象。抽象工厂模式用了工厂方法模式来创建单一对象。AbstractFactory 中的 createProductA() 和 createProductB() 都可让子类实现,这两个方法单独来看就是在创建一个对象。

Client 要通过 AbstaractFactoty 同时调用两个方法创建两个对象,这里的两个对象属于同一类。


类图

image.png

代码实现


产品抽象类

public class AbstractProductA {
}
public class AbstractProductB {
}

产品聚类

public class ProductA1 extends AbstractProductA {
}
public class ProductA2 extends AbstractProductA {
}
public class ProductB1 extends AbstractProductB {
}
public class ProductB2 extends AbstractProductB {
}

抽象工厂类

public abstract class AbstractFactory {
    abstract AbstractProductA createProductA();
    abstract AbstractProductB createProductB();
}

抽象工厂具体实现

public class ConcreteFactory1 extends AbstractFactory {
    AbstractProductA createProductA() {
        return new ProductA1();
    }
    AbstractProductB createProductB() {
        return new ProductB1();
    }
}
public class ConcreteFactory2 extends AbstractFactory {
    AbstractProductA createProductA() {
        return new ProductA2();
    }
    AbstractProductB createProductB() {
        return new ProductB2();
    }
}

客户端调用

public class Client {
    public static void main(String[] args) {
        AbstractFactory abstractFactory = new ConcreteFactory1();
        AbstractProductA productA = abstractFactory.createProductA();
        AbstractProductB productB = abstractFactory.createProductB();
        // do something with productA and productB
    }
}


参考资料


相关文章
|
4月前
|
设计模式
设计模式之抽象工厂
设计模式之抽象工厂
|
4月前
|
设计模式 Java
常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)
有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法,观察者模式,策略模式)
52 2
|
11月前
|
设计模式 Java 关系型数据库
解锁设计模式的神秘面纱:编写无懈可击的代码之抽象工厂设计模式
解锁设计模式的神秘面纱:编写无懈可击的代码之抽象工厂设计模式
37 0
|
4月前
|
设计模式
设计模式-抽象工厂
设计模式-抽象工厂
|
2月前
|
设计模式 C++
C++一分钟之-设计模式:工厂模式与抽象工厂
【7月更文挑战第14天】设计模式是解决软件设计问题的通用方案。工厂模式与抽象工厂模式是创建型模式,用于对象创建而不暴露创建逻辑。工厂模式推迟实例化到子类,但过度使用会增加复杂性。抽象工厂则创建相关对象族,但过度抽象可能造成不必要的复杂度。两者均应按需使用,确保设计灵活性。代码示例展示了C++中如何实现这两种模式。
34 3
|
3月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
11月前
|
设计模式 架构师
设计模式之抽象工厂
设计模式之抽象工厂
|
3月前
|
设计模式 Java
设计模式-抽象工厂(JAVA)
设计模式-抽象工厂(JAVA)
|
4月前
|
设计模式 关系型数据库 数据库
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
54 1
|
4月前
|
设计模式 Java 数据库连接
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?
140 1
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别