二十三种设计模式之工厂模式
核心作用
实现创建者和调用者分离
分类
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
三种工厂模式
简单工厂模式
优势劣势
简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数不同来返回不同的对象实例
对于增加新产品(新功能)无能为力!不修改代码的话,是无法扩展的。不满足开闭原则
Car 接口
package factory.simple; /** * @author SIMBA1949 * @date 2019/6/6 10:49 */ public interface Car { void run(); }
Audi 类实现 Car 接口
package factory.simple; /** * @author SIMBA1949 * @date 2019/6/6 10:50 */ public class Audi implements Car { public void run() { System.out.println("audi running"); } }
Lamborghini 类实现 Car 接口
package factory.simple; /** * @author SIMBA1949 * @date 2019/6/6 10:51 */ public class Lamborghini implements Car { public void run() { System.out.println("Lamborghini running"); } }
简单工厂 SimpleFactory
package factory.simple; /** * 简单工厂模式(静态工厂模式) * * @author SIMBA1949 * @date 2019/6/6 10:42 */ public class SimpleFactory { public static Car buildCar(String carType){ if ("audi".equalsIgnoreCase(carType)){ return new Audi(); }else if("lamborghini".equalsIgnoreCase(carType)){ return new Lamborghini(); } return null; } }
工厂方法模式
优势劣势
抽象工厂接口
package factory.method; /** * @author SIMBA1949 * @date 2019/6/6 11:04 */ public interface MethodFactory { Car buildCar(); }
Car 接口
package factory.method; /** * @author SIMBA1949 * @date 2019/6/6 10:49 */ public interface Car { void run(); }
Audi 类实现 Car 接口
package factory.method; /** * @author SIMBA1949 * @date 2019/6/6 10:50 */ public class Audi implements Car { public void run() { System.out.println("audi running"); } }
AudiFactory 工厂类实现抽象工厂接口
package factory.method; /** * @author SIMBA1949 * @date 2019/6/6 11:04 */ public class AudiFactory implements MethodFactory { public Car buildCar() { return new Audi(); } }
Lamborghini 类实现 Car 接口
package factory.method; /** * @author SIMBA1949 * @date 2019/6/6 10:51 */ public class Lamborghini implements Car { public void run() { System.out.println("Lamborghini running"); } }
Lamborghini 工厂类实现抽象工厂接口
package factory.method; /** * @author SIMBA1949 * @date 2019/6/6 11:04 */ public class LamborghiniFactory implements MethodFactory { public Car buildCar() { return new Lamborghini(); } }
Client 测试
package factory.method; /** * @author SIMBA1949 * @date 2019/6/6 11:05 */ public class MethodFactoryClient { public static void main(String[] args) { Car audi = new AudiFactory().buildCar(); Car lamborghini = new LamborghiniFactory().buildCar(); } }