自学内容网 自学内容网

工厂模式

工厂模式

工厂模式(Factory Pattern)提供了一种创建对象的最佳方式。我们不必关心对象的创建细节,只需要根据不同情况获取不同产品即可。

简单工厂

一个工厂根据需要返回具体对象

请添加图片描述

创建抽象汽车类以及实现子类:

public abstract class Car {
    String engine;
    abstract void run();
}
public class MiniCar extends Car{
    public MiniCar() {
        this.engine = "双缸";
    }

    @Override
    void run() {
        System.out.println("MiniCar in running");
    }
}
public class VanCar extends Car{
    public VanCar() {
        this.engine = "单缸";
    }

    @Override
    void run() {
        System.out.printf("VanCar is running");
    }
}

创建简单工厂:

public class SimpleFactory {
    public Car newCar(String car){
        Car res = null;
        if("van".equals(car)){
            res = new VanCar();
        }else if("min".equals(car)){
            res = new MiniCar();
        }
        return res;
    }
}

测试:

public class Main {
    public static void main(String[] args) {
        SimpleFactory factory = new SimpleFactory();
        Car min = factory.newCar("min");
        min.run();
        Car van = factory.newCar("van");
        van.run();
    }
}

工厂方法

每个工厂只负责造一种对象

请添加图片描述

抽象工厂类及其实现子类:

public abstract class WulinFactory {
    abstract Car newCar();
}
public class WulinMiniFactory extends WulinFactory{
    @Override
    Car newCar() {
        return new MiniCar();
    }
}
public class WulinVanFactory extends WulinFactory{
    @Override
    Car newCar() {
        return new VanCar();
    }
}

测试:

public class Main {
    public static void main(String[] args) {
        WulinMiniFactory miniFactory = new WulinMiniFactory();
        Car car = miniFactory.newCar();
        car.run();

        WulinVanFactory vanFactory = new WulinVanFactory();
        Car car1 = vanFactory.newCar();
        car1.run();
    }
}

抽象工厂

需要什么就造什么

请添加图片描述

在抽象工厂中添加其他需要造的对象:

public abstract class WulinFactory {
    abstract Car newCar();
    abstract Mask newMask();
}

每个工厂去造自己的对象,对于其他产品不做实现:

public class WulinMiniFactory extends WulinFactory{
    @Override
    Car newCar() {
        return new MiniCar();
    }

    @Override
    Mask newMask() {
        return null;
    }
}

原文地址:https://blog.csdn.net/weixin_74144099/article/details/142459784

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!