设计模式之抽象工厂模式

一、什么是抽象工厂模式?

1.1 作用

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

1.2 使用场景

  • 一个系统要独立于它的产品的创建、组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现时。

二、实例

车辆建造工厂和汽车涂装工厂

2.1 抽象类

抽象车辆,车辆可以移动

/**
 * 抽象车辆
 * @author yeyangshu
 * @version 1.0
 */
public abstract class AbstractVehicle {
    abstract void move();
}

抽象颜色,可以获得一种颜色

/**
 * 抽象颜色
 * @author yeyangshu
 * @version 1.0
 */
public abstract class AbstractColor {
    public abstract void paint();
}

2.2 创建车辆和颜色的实体类

/**
 * 汽车
 * @author yeyangshu
 * @version 1.0
 */
public class Car extends AbstractVehicle {

    public void move() {
        System.out.println("汽车速度:120km/h");
    }
}
/**
 * 自行车
 * @author yeyangshu
 * @version 1.0
 */
public class Bicycle extends AbstractVehicle {
    @Override
    public void move() {
        System.out.println("自行车速度:30km/h");
    }
}
/**
 * 白色
 * @author yeyangshu
 * @version 1.0
 */
public class White extends AbstractColor {
    @Override
    public void paint() {
        System.out.println("白色涂装");
    }
}
/**
 * 黑色
 * @author yeyangshu
 * @version 1.0
 */
public class Black extends AbstractColor {
    @Override
    public void paint() {
        System.out.println("黑色涂装");
    }
}

2.3 创建抽象工厂

/**
 * 抽象工厂类
 * @author yeyangshu
 * @version : AbstractFactory.java, v 0.1 20xx-xx-xx
 */
public abstract class AbstractFactory {
    /**
     * 建造车辆
     * @return
     */
    abstract AbstractVehicle createVehicle();

    /**
     * 得到车辆涂装颜色
     * @return
     */
    abstract AbstractColor getColor();
}

2.4 创建汽车工厂和自行车工厂实体类

/**
 * 汽车工厂
 * @author yeyangshu
 * @version 1.0
 */
public class CarFactory extends AbstractFactory {

    /**
     * 汽车工厂创建小汽车
     * @return
     */
    @Override
    public Car createVehicle() {
        return new Car();
    }

    /**
     * 涂装工厂为汽车喷白漆
     * @return
     */
    @Override
    public White getColor() {
        return new White();
    }
}
/**
 * 自行车工厂
 * @author yeyangshu
 * @version 1.0
 */
public class BicycleFactory extends AbstractFactory {
    /**
     * 自行车工厂建造自行车
     * @return
     */
    @Override
    public Bicycle createVehicle() {
        return new Bicycle();
    }

    /**
     * 涂装工厂为自行车喷黑漆
     * @return
     */
    @Override
    public Black getColor() {
        return new Black();
    }
}

2.5 使用工厂建造白色汽车和黑色自行车

public class Main {
    public static void main(String[] args) {
        // 创建汽车工厂
        AbstractFactory carFactory = new CarFactory();
        // 建造一辆汽车
        AbstractVehicle car = carFactory.createVehicle();
        // 为汽车喷漆
        AbstractColor carColor = carFactory.getColor();
        car.move();
        carColor.paint();


        // 创建自行车工厂
        AbstractFactory bicycleFactory = new BicycleFactory();
        // 建造一辆自行车
        AbstractVehicle bicycle = bicycleFactory.createVehicle();
        // 为自行车喷漆
        AbstractColor bicycleColor = bicycleFactory.getColor();
        bicycle.move();
        bicycleColor.paint();
    }
}

结果:

汽车速度:120km/h
白色涂装
自行车速度:30km/h
黑色涂装
posted @ 2020-06-04 20:46  叶杨树  阅读(201)  评论(0)    收藏  举报