02、工厂模式
2、工厂模式
遵循的原则:
1、简单工厂模式
其实我们最多用的还是简单工厂模式,不过他违反了开闭原则
- 类实现及类的结构
总结:简单工厂模式,有一个工厂类提供静态方法根据多态的特性返回相应的实例对象!
2、工厂方法模式
优点:实现的开闭原则
但是代码太过冗余
- 类结构
对比:
- 代码复杂度: 高
- 结构复杂度:高
- 编程复杂度:高
- 管理复杂度:高
所以我们在实际开发中一般选用简单工厂模式!
3、抽象工厂模式
工厂的工厂叫抽象工厂模式!
有产品族的概念:
手机和路由器有不同的厂家制造,不同的厂家有不同的工厂实现
抽象工厂接口 根据不同实现出不同的工厂,工厂生产不同产品族的产品!
- 抽象工厂,定义工厂需要生产的东西
package _02factory.abstract1;
/**
* @author zhangbingbing
* @version 1.0
* @date 2020/6/14 23:32
*/
public interface AbstractFactory {
//生产手机
Phone createPhone();
//生产路由器
Router createRouter();
//笔记本
Laptop createLaptop();
}
- 华为工厂:专门生产华为产品族的东西
package _02factory.abstract1;
/**
* @author zhangbingbing
* @version 1.0
* @date 2020/6/14 23:34
*/
//华为工厂
public class HuaweiFactory implements AbstractFactory {
@Override
public Phone createPhone() {
return new Huawei(); //华为手机
}
@Override
public Router createRouter() {
return new HuaweiRouter(); //华为路由器
}
@Override
public Laptop createLaptop() {
//全改
return new HuaweiLaptop(); //华为笔记本
}
}
- 客户根据不同工厂获取不同产品族的产品
package _02factory.abstract1;
/**
* @author zhangbingbing
* @version 1.0
* @date 2020/6/14 23:34
*/
public class Client {
public static void main(String[] args) {
System.out.println("=================苹果系列产品==========");
AbstractFactory factory = new AppleFactory();
Phone phone = factory.createPhone();
Router router = factory.createRouter();
phone.sing();
router.wifi();
System.out.println("=================华为系列产品==========");
AbstractFactory factory2 = new HuaweiFactory();
phone = factory2.createPhone();
router = factory2.createRouter();
phone.sing();
router.wifi();
}
}
总结:
- 违反了开闭原则,牵一发动全身,所以我们一般用于稳定的类的构建!
- 应用条件:当我们不需要关心对象的具体实现,可以让工厂给我们生产!