一、工厂模式作用
实现了创建者和调用者的分离。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
二、工厂模式的核心本质
实例化对象,用工厂方法代替new操作。
三、工厂模式的详细分类
3.1 简单工厂模式
简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。对于增加新产品(新功能)必须要修改源程序!
简单工厂模式的两种实现方式:
3.1.1 第一种方式
车类型接口:
package edu.aeon.model.factory.easyfactory; /** * [说明]:车类型接口 * @author aeon(qq:1584875179) */ public interface Car { void run(); }
宝马类:
package edu.aeon.model.factory.easyfactory; /** * [说明]:宝马类 * @author aeon(qq:1584875179) * */ public class BMW implements Car { @Override public void run() { System.out.println("宝马在跑!"); } }
比亚迪类:
package edu.aeon.model.factory.easyfactory; /** * [说明]:比亚迪类 * @author aeon(qq:1584875179) * */ public class Byd implements Car { @Override public void run() { System.out.println("比亚迪在跑!"); } }
生产车的工厂类:
package edu.aeon.model.factory.easyfactory; /** * [说明]:生产车的工厂类 * @author aeon(qq:1584875179) * */ public class CarFactory { public static Car creatCar(String type){ if("bmw".equals(type)){ return new BMW(); }else if("byd".equals(type)){ return new Byd(); }else{ return null; } } }
测试在没有工厂模式下的调用过程:
package edu.aeon.model.factory.easyfactory; /** * [说明]:测试在没有工厂模式下的调用过程 * @author aeon(qq:1584875179) * */ public class TestNoFactory { public static void main(String[] args) { Car car1=new BMW(); Car car2=new Byd(); car1.run(); car2.run(); } }
测试结果截图如下:
测试简单工厂模式下的调用类:
package edu.aeon.model.factory.easyfactory; /** * [说明]:测试简单工厂模式 * @author aeon(qq:1584875179) * */ public class TestEasyFactory { public static void main(String[] args) { Car car1=CarFactory.creatCar("bmw"); Car car2=CarFactory.creatCar("byd"); car1.run(); car2.run(); } }
测试结果如下:
3.1.2 第二种方式(工厂类写法)
package edu.aeon.model.factory.easyfactory; /** * [说明]:简单工厂模式的第二种写法 * @author aeon(qq:1584875179) * */ public class CarFactory2 { public static Car createBMW(){ return new BMW(); } public static Car createByd(){ return new Byd(); } }
测试类:
package edu.aeon.model.factory.easyfactory; /** * [说明]:测试简单工厂模式第二种写法 * @author aeon(qq:1584875179) * */ public class TestEasyFactory2 { public static void main(String[] args) { Car car1=CarFactory2.createBMW(); Car car2=CarFactory2.createByd(); car1.run(); car2.run(); } }
测试结果截图如下:
3.2 工厂方法模式
3.3抽象工厂模式
原文:https://www.cnblogs.com/aeon/p/10301657.html