工厂模式
工厂模式源代码:
👉链接:https://pan.baidu.com/s/1Isgq9uQ0RD2FMrymOwgfQA
提取码:8e0a
一、工厂模式简介
1. 工厂模式的作用:
◆作用:实现了创建者和调用者的分离详细分类
◆核心本质:
- 实例化对象不使用new,用工厂方法代者
- 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
2. 工厂模式的分类:
◆简单工厂模式 :用来生产同一等级结构中的任意产品(对于增加新的产品,需要球盖已有代码)
◆工厂方法模式 :用来生产同一等级结构中的固定产品(支持增加任意产品)
◆抽象工厂模式 :围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
3. 工厂模式实现的OOP七大原则
OOP七大原则
◆开闭原则 : 对扩展开放,对修改关闭
◆里氏替换原则 : 继承必须确保超类所拥有的性质在子类中仍然成立
◆依赖倒置原则 : 要面向接口编程,不要面向实现编程。
◆单一职责原则 : 控制类的粒度大小、将对象解耦、提高其内聚性。
◆接口隔离原则 : 要为各个类建立它们需要的专用接口
◆迪米特法则 : 只与你的直接朋友交谈,不跟“陌生人”说话。
◆合成复用原则 : 尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
工厂模式实现的原则
开闭原则 : 一个软件的实体应当对扩展开放,对修改关闭
依赖倒转原则 : 要针对接口编程,不要针对实现编程
迪米特法则 : 只与你直接的朋友通信,而避免和陌生人通信
二、工厂模式实现
三种工厂模式源代码:
👉链接:https://pan.baidu.com/s/1Isgq9uQ0RD2FMrymOwgfQA
提取码:8e0a
1. 简单工厂模式
实现五菱(WuLing)和特斯拉(Tesla)两种工厂的工厂模式
1.1 结构图:
1.2 具体实现:
CarFactory:
package factory.simple;
/**
* @author eli_zy
* @date 2021/8/11
*/
//静态工厂模式
//增加一个新产品需要修改大量代码
public class CarFactory {
//方法一
public static Car getCar(String name) {
if (name.equals("WuLing")) {
return new WuLing();
} else if (name.equals("Tesla")) {
return new Tesla();
} else {
return null;
}
}
//方法二
public static Car getWuLing() {
return new WuLing();
}
public static Car getTesla() {
return new Tesla();
}
}
2. 工厂方法模式
需要新加一个车工厂接口(CarFactory),每种车的实体类之后,再为其设置好 一个工厂,相当于在工厂上又加了一层
2.1 结构图:
每种车的实体类之后,再为其设置好 一个工厂,相当于在工厂上又加了一层
2.2 具体实现:
车工厂接口(CarFactory)
package factory.Method;
//工厂方法(每个车都有自己的工厂)
public interface CarFactory {
Car getCar();
}
TeslaFactory
package factory.Method;
public class TeslaFactory implements CarFactory{
@Override
public Car getCar() {
return new Tesla();
}
}
WuLingFactory
package factory.Method;
public class WuLingFactory implements CarFactory{
@Override
public Car getCar() {
return new WuLing();
}
}
3. 抽象工厂模式
实现工厂和产品族之间的关系,使用于产品种类变化不大的情况
3.1 结构图:
3.2 具体实现:
HuaweiFactory
package factory.Abstract;
public class HuaweiFactory implements IProductFactory{
@Override
public IPhoneProduct iphoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct irouterProduct() {
return new HuaweiRouter();
}
}