23种设计模式——工厂模式
2020-03-05 00:12
183 查看
文章目录
工厂模式
工厂模式:(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
-
核心本质:
实例化对象不用 new,用工厂方法代替。 - 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
三种模式:
-
简单工厂模式
用来生产同一等级结构的任意产品。 (对于增加新的产品,需要覆盖已有代码)
-
用来生产同一等级结构中的固定产品。(支持增加任意产品)
-
围绕一个超级工厂创建其他工厂。超级工厂又称为其他工厂的工厂。
1. 简单工厂模式
创建一个接口,
public interface Car { public void name(); }
编写类实现接口,
WuLing.class
public class WuLing implements Car { @Override public void name() { System.out.println("五菱宏光"); } }
Tesla .class
public class Tesla implements Car { @Override public void name() { System.out.println("特斯拉"); } }
编写调用类;
public class Consumer { public static void main(String[] args) { WuLing wuLing=new WuLing(); Tesla tesla = new Tesla(); wuLing.name(); tesla.name(); } }
以上是我们经常写的代码,没有用到工厂模式。
改造
添加一个工厂类(
相当于中间商),来实现实现类的初始化。
public class CarFactory { public static Car getCar(String car) { if ("五菱".equals(car)) { return new WuLing(); } else if ("特斯拉".equals(car)) { return new Tesla(); } else return null; } }
这时我们的调用者应该这样写
public class Consumer { public static void main(String[] args) { Car wuling = CarFactory.getCar("五菱"); Car tesla = CarFactory.getCar("特斯拉"); wuling.name(); tesla.name(); } }
这样就避免了new 实现了解耦。
缺点缺点也很明显当我们想加一个功能时就要修改工厂类。
如何解决这一问题呢?
2.厂方法模式
工厂方法模式的工厂是一个接口,然后每个实现了创建一个各自的工厂实现这个接口工厂。
工厂接口
public interface CarFactory { Car getCar(); }
五菱要有一个自己的工厂。
WuLingFactory.class
public class WuLingFactory implements CarFactory { @Override public Car getCar() { return new WuLing(); } }
特斯拉也要有一个自己的工厂。
TeslaFactory.class
public class TeslaFactory implements CarFactory { @Override public Car getCar() { return new Tesla(); } }
这时调用者代码
public class Consumer { public static void main(String[] args) { Car tesla = new TeslaFactory().getCar(); Car wuLing = new WuLingFactory().getCar(); tesla.name(); wuLing.name(); } }
这个好处为添加功能时不用修改代码。例如添加一台大众车。就只需要创建它的实现类和工厂就可以,不用修改工厂代码。
大众实现类:
public class DaZong { public void name() { System.out.println("大众"); } }
大众工厂z
public class DaZongFactory implements CarFactory { @Override public Car getCar() { return new DaZong(); } }
在提供者中添加
Car dazong = new DaZongFactory().getCar(); dazong.name();
就可以实现。
简单工厂和方法工厂对比
-
结构复杂度: 简单工厂简单
-
代码复杂度: 简单工厂简单
-
编程复杂度: 简单工厂简单
-
管理上的复杂度: 简单工厂简单
-
根据设计原则: 工厂方法模式
-
根据实际业务:简单工厂模式
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 23种设计模式之工厂模式
- 23种设计模式-FactoryMethod(工厂方法)设计模式
- java_23种设计模式之工厂方法模式
- java 23种设计模式--工厂模式(factory)
- 23种设计模式-FactoryMethod工厂方法
- 23种设计模式——工厂模式
- 【23种设计模式从零学2—简单工厂与工厂模式】
- 23种设计模式(3):工厂方法模式
- 23种设计模式之python实现--工厂方法
- Java 23种设计模式之工厂方法模式
- 23种设计模式01---工厂模式之抽象工厂模式
- 23种设计模式~工厂方法设计模式
- Java23种常见设计模式 05工厂模式
- 精通23种设计模式之简单工厂模式
- #23种设计模式之--1--Factory(工厂模式)#
- 23种设计模式—之简单工厂模式
- 工厂方法模式GoF23种设计模式之创建型模式之工厂方法模式
- JAVA的23种设计模式---工厂模式
- 23种设计模式#【代码示例】工厂设计模式(反射&方法实现)
- 23种设计模式之-工厂模式