工厂模式

工厂模式

工厂模式需要了解的一些概念

作用:实现了创建者和调用者的分离

详细分类:

​ 简单工厂模式

​ 工厂方法模式

工厂模式所满足的OOP七大原则:

​ 开闭原则:一个软件的实体应当对扩展开放,对修改关闭

​ 依赖倒转原则:要针对接口编程,不要针对实现编程

​ 迪米特原则:只与你直接的朋友通信,而避免和陌生人通信

工厂模式的核心本质:

​ 实例化对象不使用new,用工厂方法代替

​ 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

简单工厂模式

此模式中只有一个工厂,可以通过这个工厂生产任意的东西,但是此模式是不满足OOP设计原则中的开闭性原则的,因为当需要 增加一个东西的时候,需要更改原来工厂的代码,具体情况请看下面的解释。

牵涉到的类如下图:

在这里插入图片描述

类的结构如下:

//car接口
package factory.simple;
public interface Car {
    void name();
}

//特斯拉实现类
package factory.simple;
public class Tesla implements Car {
    @Override
    public void name(){
        System.out.println("特斯拉!");
    }
}

//五菱宏光实现类
package factory.simple;
public class WuLing implements Car {
    @Override
    public void name(){
        System.out.println("五菱宏光");
    }
}

/*简单工厂模式中只有一个工厂,在这个工厂中可以生产所有的东西,但是简单工厂模式不满足OOP七大原则中的开闭性原则,因为此工厂
中现在只有五菱宏光和特斯拉两种车,如果想要增加一个车辆,那么必须要更改原来的这个工厂,比如说你现在想增加一个大众,那么你
必须要改变此工厂的代码,往其中加上一个大众车辆,所以这样就不满足开闭性原则了*/
package factory.simple;
public class CarFactory {
    public static Car getCar(String car){
        if(car.equals("五菱")){
            return new WuLing();
        }else if(car.equals("特斯拉")){
            return new Tesla();
        }else{
            return null;
        }
    }
}

//消费者类
package factory.simple;
public class Consumer {
    public static void main(String[] args) {
        //没有工厂模式之前都是用new的方式创建对象
       // Car car=new WuLing();
      //  Car car2=new Tesla();
        //2.使用工厂方式获取对象
        Car car = CarFactory.getCar("五菱");
        Car car2 = CarFactory.getCar("特斯拉");
        car.name();
        car2.name();
    }
}

简单工厂模式的结构图,如下图:

在这里插入图片描述

工厂方法模式

工厂方法模式中牵涉到的类如下图:

在这里插入图片描述

工厂方法模式中的类的结构如下:

//Car接口
package factory.method;
public interface Car {
    void name();
}

//特斯拉实现类
package factory.method;
public class Tesla implements Car {
    @Override
    public void name(){
        System.out.println("特斯拉!");
    }
}

//五菱宏光实现类
package factory.method;
public class WuLingFactory implements CarFactory {
    @Override
    public Car getCar(){
        return new WuLing();
    }
}

//汽车工厂接口CarFactory
package factory.method;
public interface CarFactory {
    Car getCar();

}

//五菱宏光汽车接口实现类
package factory.method;
public class WuLingFactory implements CarFactory {
    @Override
    public Car getCar(){
        return new WuLing();
    }
}

//特斯拉汽车接口实现类
package factory.method;
public class TeslaFactory implements CarFactory {
    @Override
    public Car getCar(){
        return new Tesla();
    }
}

//消费者类
package factory.method;
public class Consumer {
    public static void main(String[] args) {
        Car car=new WuLingFactory().getCar();
        Car car2=new TeslaFactory().getCar();
        car.name();
        car2.name();
    }
}

工厂方法模式的结构如下图:

在这里插入图片描述

比较简单工厂模式和工厂方法模式

结构复杂度:简单工厂模式要比工厂方法模式更加的简单

代码复杂度:简单工厂模式要比工厂方法模式的代码复杂度更简单

编程复杂度:简单工厂模式更加简单

管理上的复杂度:简单工厂模式更加简单

所以在实际选择的时候,虽然工厂方法模式满足设计原则中的开闭性原则,但我们一般还是会选择简单工厂模式,就是只让程序中出现一个工厂,这个工厂中可以生产所有的东西。因为简单工厂模式比较容易操作。

简单工厂模式(静态工厂模式):虽然某种程度上不符合设计原则,但实际使用最多!

工厂方法模式:不修改已有类的前提下,通过增加新的工厂类实现扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr-X~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值