抽象工厂模式-java

221 阅读2分钟

抽象工厂模式

要理解抽象工厂模式,就要理解什么叫产品族,什么叫产品族呢?举个例子!苹果公司所生成的手机电脑属于一个产品族,小米公司生产的手机和电脑就属于一个产品族,不过苹果手机和小米手机属于同级产品,苹果电脑和小米电脑属于同级产品。

这里我们的抽象商品要设计两个,一个抽象的手机,一个抽象的电脑,工厂要按产品族来设计,如苹果公司的工厂只生产苹果设备,小米公司工厂只生产小米设备。

抽象工厂角色如下:

  1. 抽象产品:描述具体产品的共同特征(特征就是属性或者行为),这里的抽象产品是手机
  2. 具体产品:实现抽象产品(例如苹果手机、华为手机等...)
  3. 抽象工厂: 提供创建(生产)设备的方法
  4. 具体工厂: 实现抽象工厂

抽象工厂模式要添加产品的话要修改原有代码,所以它不满足开闭原则。

抽象产品代码

/**
 * 抽象产品手机
 */
public interface Phone {
    // 手机开机功能
    void start();
}
/**
 * 抽象产品电脑
 */
public interface Computer {
    // 电脑开机
    void start();
}

具体产品代码

/**
 * 具体产品苹果11
 */
public class Iphone11 implements Phone{
    @Override
    public void start() {
        System.out.println("苹果11开机...");
    }
}
/**
 * 具体产品苹果电脑
 */
public class MacBookPro implements Computer{
    @Override
    public void start() {
        System.out.println("苹果电脑开机...");
    }
}
/**
 * 具体产品小米11
 */
public class XiaoMi11 implements Phone{
    @Override
    public void start() {
        System.out.println("小米11开机...");
    }
}
/**
 * 具体产品小米电脑
 */
public class MiBookPro implements Computer{
    @Override
    public void start() {
        System.out.println("小米电脑开机...");
    }
}

抽象工厂代码

/**
 * 抽象工厂
 */
public interface FoxconnFactory {
    // 创建电脑
    Computer createComputer();

    // 创建手机
    Phone createPhone();
}

具体工厂代码

/**
 * 具体工厂苹果工厂
 */
public class AppleFactory implements FoxconnFactory{
    // 创建苹果电脑
    @Override
    public Computer createComputer() {
        return new MiBookPro();
    }

    // 创建苹果手机
    @Override
    public Phone createPhone() {
        return new Iphone11();
    }
}
/**
 * 具体工厂小米工厂
 */
public class XiaoMiFactory implements FoxconnFactory{
    // 创建小米电脑
    @Override
    public Computer createComputer() {
        return new MiBookPro();
    }

    // 创建小米手机
    @Override
    public Phone createPhone() {
        return new XiaoMi11();
    }
}

测试代码


public class Test {
    public static void main(String[] args) {
        // 创建小米工厂对象
        FoxconnFactory factory = new XiaoMiFactory();

        // 创建小米电脑对象
        Computer computer = factory.createComputer();

        // 创建小米手机对象
        Phone phone = factory.createPhone();

        // 执行开机操作
        computer.start();
        phone.start();
    }
}

运行结果

002.png