Java设计模式之工厂模式详解
1.什么是工厂模式?
工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。
2.作用:
实现类创建者和调用者的分离
1).工厂模式是为了解耦:把对象的创建和使用的过程分开
2).工厂模式可以降低代码重复
3)因为工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误
3.核心本质:
-
实例化对象不使用new,用工厂方法代替 将选择实现类,创建对象统一管理和控制。从而将调用者和我们的实现类解耦
4.详细分类:
1.简单工厂模式/静态工厂模式
-
用来生产同一等级结构中的任意产品
2.工厂方法模式
-
用来生产同一等级结构中的固定产品
3.抽象工厂模式
-
围绕一个超级工厂创建其他工厂。该超级工行又称为其他工厂的工厂
5.简单工厂模式/静态工厂模式:
弊端:如果你不修改代码(工厂类),无法增加新的产品
代码实例(实现一个买汽车的过程)
1)构建一个汽车接口
package gongchang.simple; public interface Car { void name(); }
2)分别两种汽车型号类继承这个接口
特斯拉
public class Tesla implements Car { @Override public void name() { System.out.println("我是特斯拉"); } }
五菱
public class Wuling implements Car{ @Override public void name() { System.out.println("我是五菱宏光"); } }
3)构建工厂类
public class CarFactor { public static Car getCar(String car){ if (car.equals("五菱")){ return new Wuling(); }else if(car.equals("特斯拉")){ return new Tesla(); }else { return null; } } }
4)创建消费者类,使用工厂创建这个对象,从而避免了手动new对象
通俗来讲就是我去买汽车去工厂买了已经造好的汽车,而不是自己手动去new一辆汽车
public class Consumer { public static void main(String[] args) { //使用工厂创建 Car car = CarFactor.getCar("特斯拉"); car.name(); } }
5)优化:修改工厂类的结构
略微增加了可扩展性
public class CarFactor { public static Car getWuling(){ return new Wuling(); } public static Car getTesla(){ return new Tesla(); } }
6.工厂方法模式
创建新产品时进行横向扩展,创建新的工厂类,不需要修改原有代码
1)创建汽车接口,车型类,消费者类这三步与简单工厂模式相同
2)创建汽车工厂接口
3)当添加每种型号汽车时,分别调用上面的接口创建自己的工厂类
public class TeslaFactory implements CarFactory { @Override public Car getCar() { return new Tesla(); } }
public class WulingFactory implements CarFactory { @Override public Car getCar() { return new Wuling(); } }
7.两种模式对比总结:
简单工厂模式:
-
结构复杂度较优 代码复杂度较优 编程复杂度较优 管理复杂度较优
根据设计原则应选择:工厂方法模式
根据实际业务应选择:简单工厂模式
下一篇:
算法-链表-合并两个升序链表