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

在上面描述的例子中,我们首先确定了抽像产品接口ProductAProductB,它们分别代表两个产品系列。

然后,我们发现了具体的产品类型ConcreteProductA1ConcreteProductA2ConcreteProductB1ConcreteProductB2,分别发现了抽像产品接口中的方法。

接着,我们确定了抽像工厂接口AbstractFactory,它包含两个方法用于创建产品对像。

我们还发现了两个实体工厂类ConcreteFactory1ConcreteFactory2,它们分别实现了抽像工厂接口中的方法,根据需要创建不同系列的产品对像。

在客户端代码中,我们创建了实体的工厂对象,并使用工厂对象创建了实体的产品对象。通过工厂对象的方法,我我们可以轻松地获取对应系列的产品对像,并调整使用其他方法进行操作。

抽像工厂模型的关键思想是提供一个抽像工厂接口,该接口确定了一系列相关产品的创意,具体的工厂类责任实现这些方法,创建相关系列的产品。通过使用抽像工厂模型,我们可以实现客户终端代码与实体产品类的解构,使客户终端代码更加灵活、可扩展,并且满足开闭原则。

posted @   liuxuechao  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示