手写Java设计模式之抽象工厂模式,附源码解读

接上篇,抽象工厂模式将汽车的一些属性可以抽象出来,可以理解为给不同汽车品牌生成时加上不同的特性,如颜色等,具体代码如下:

引入颜色接口:

java 复制代码
public interface Colour {
    void fill();
}

将颜色与汽车生成品牌抽象出来,增加抽象类:

java 复制代码
public abstract class CarAndColourFactory {
    public abstract Car getCar(String CarType);
    public abstract Colour getColour(String colour);
}

继承抽象类,分别对不同属性的特征进行操作,如涂上颜色等,首先实现颜色接口:

java 复制代码
public class Green implements Colour {
    @Override
    public void fill() {
        System.out.println("涂上绿色");
    }
}
java 复制代码
public class Red implements Colour {
    @Override
    public void fill() {
        System.out.println("涂上红色");
    }
}

汽车品牌和汽车颜色分别继承抽象类:

java 复制代码
public class CarTypeFactory extends CarAndColourFactory{
    @Override
    public Car getCar(String CarType) {
        if(CarType == null){
            return null;
        }
        if(CarType.equalsIgnoreCase("XiaoMi")){
            return new XiaoMi();
        } else if(CarType.equalsIgnoreCase("HuaWei")){
            return new HuaWei();
        } else if(CarType.equalsIgnoreCase("Tesla")){
            return new Tesla();
        }
        return null;
    }

    @Override
    public Colour getColour(String colour) {
        return null;
    }
}
java 复制代码
public class ColourFactory extends CarAndColourFactory{
    @Override
    public Car getCar(String CarType) {
        return null;
    }

    @Override
    public Colour getColour(String colour) {
        if(colour == null){
            return null;
        }
        if(colour.equalsIgnoreCase("Green")){
            return new Green();
        } else if(colour.equalsIgnoreCase("Red")){
            return new Red();
        }
            return null;
    }
}

增加一个根据参数区分增加汽车属性的加工工厂类,如下:

java 复制代码
public class FactoryProducer {
    public static CarAndColourFactory get(String choice){
         if(choice.equalsIgnoreCase("Car")){
             return new CarTypeFactory();
         }else if(choice.equalsIgnoreCase("Colour")){
             return new ColourFactory();
         }
         return null;
    }
}

进行汽车加工:

java 复制代码
public class CarTest {
    public static void main(String[] args){
       /* CarFactory carFactory = new CarFactory();
        carFactory.getCar("xiaomi").draw();
        carFactory.getCar("huawei").draw();
        carFactory.getCar("tesla").draw();*/
        CarAndColourFactory carAndColourFactory1 = FactoryProducer.get("Car");
        carAndColourFactory1.getCar("xiaomi").draw();
        CarAndColourFactory carAndColourFactory= FactoryProducer.get("Colour");
        carAndColourFactory.getColour("Green").fill();
    }
}

产生结果:

相关推荐
哞哞不熬夜8 分钟前
JavaEE--SpringIoC
java·开发语言·spring boot·spring·java-ee·maven
滑水滑成滑头9 分钟前
**点云处理:发散创新,探索前沿技术**随着科技的飞速发展,点云处理技术在计算机视觉、自动驾驶、虚拟现实等领域的应用愈发广
java·python·科技·计算机视觉·自动驾驶
千里马-horse18 分钟前
fastddsgen.jar 简介
java·jar·fast dds·fastddsgen
TT哇19 分钟前
【Maven】Maven设置国内源
java·maven
Asort29 分钟前
JavaScript设计模式(十六)——迭代器模式:优雅遍历数据的艺术
前端·javascript·设计模式
dyj0951 小时前
【Devops-Jenkins自动将Java Maven工程编译成jar、并打成Docker镜像,并上传Harbor】
java·jenkins·devops
昨天的猫1 小时前
原来我们写的单例还存在缺陷~~
设计模式
gordon~91 小时前
Spring 的bean是安全的吗
java·安全·spring·bean
梵得儿SHI1 小时前
Java 反射机制实战:对象属性复制与私有方法调用全解析
java·开发语言·java反射机制的实际应用·对象属性复制·反射调用私有方法·私有字段·类型兼容性和敏感字段忽略
Tiny_React1 小时前
智能体设计模式-CH13:人类参与环节(Human-in-the-Loop)
设计模式