10.8
抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种创建设计模型,它提供了一种方法来创建一个系列相关或相互依赖的对象,而不需要指定具体的类。
下面是一个简单的Java代码示例,展示了抽像工厂模型的现实:
// 抽象产品接口A
interface ProductA {
void doSomething();
}
// 具体产品类A1
class ConcreteProductA1 implements ProductA {
@Override
public void doSomething() {
System.out.println("ConcreteProductA1 do something");
}
}
// 具体产品类A2
class ConcreteProductA2 implements ProductA {
@Override
public void doSomething() {
System.out.println("ConcreteProductA2 do something");
}
}
// 抽象产品接口B
interface ProductB {
void doSomething();
}
// 具体产品类B1
class ConcreteProductB1 implements ProductB {
@Override
public void doSomething() {
System.out.println("ConcreteProductB1 do something");
}
}
// 具体产品类B2
class ConcreteProductB2 implements ProductB {
@Override
public void doSomething() {
System.out.println("ConcreteProductB2 do something");
}
}
// 抽象工厂接口
interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
// 具体工厂类1
class ConcreteFactory1 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
// 具体工厂类2
class ConcreteFactory2 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
// 客户端代码
public class AbstractFactoryPatternExample {
public static void main(String[] args) {
// 创建工厂对象
AbstractFactory factory1 = new ConcreteFactory1();
AbstractFactory factory2 = new ConcreteFactory2();
// 使用工厂对象创建产品对象
ProductA productA1 = factory1.createProductA();
ProductB productB1 = factory1.createProductB();
ProductA productA2 = factory2.createProductA();
ProductB productB2 = factory2.createProductB();
// 调用产品对象的方法
productA1.doSomething();
productB1.doSomething();
productA2.doSomething();
productB2.doSomething();
}
}
在上面描述的例子中,我们首先确定了抽像产品接口ProductA
和ProductB
,它们分别代表两个产品系列。
然后,我们发现了具体的产品类型ConcreteProductA1
、ConcreteProductA2
、ConcreteProductB1
和ConcreteProductB2
,分别发现了抽像产品接口中的方法。
接着,我们确定了抽像工厂接口AbstractFactory
,它包含两个方法用于创建产品对像。
我们还发现了两个实体工厂类ConcreteFactory1
和ConcreteFactory2
,它们分别实现了抽像工厂接口中的方法,根据需要创建不同系列的产品对像。
在客户端代码中,我们创建了实体的工厂对象,并使用工厂对象创建了实体的产品对象。通过工厂对象的方法,我我们可以轻松地获取对应系列的产品对像,并调整使用其他方法进行操作。
抽像工厂模型的关键思想是提供一个抽像工厂接口,该接口确定了一系列相关产品的创意,具体的工厂类责任实现这些方法,创建相关系列的产品。通过使用抽像工厂模型,我们可以实现客户终端代码与实体产品类的解构,使客户终端代码更加灵活、可扩展,并且满足开闭原则。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通