标签:依赖 工厂方法模式 迪米特法则 抽象工厂 陌生人 over null oop 管理
核心本质:
实例化对象不使用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
三种模式:
用来生产同一等级结构中的任意产品(对于增加的新产品,需要求盖已有的代码)
package factory.simple; public interface Car { void name(); }
package factory.simple; //静态工厂模式 //增加一个新的产品,不修改代码的情况下做不到 //开闭原则 对修改时关闭的 public class CarFactory { //方法一 public static Car getCar(String Car) { if (Car.equals("五菱")) { return new Wuling(); } else if (Car.equals("特斯拉")) { return new Tesla(); }else { return null; } } //方法二 public static Car getWuling(){ return new Wuling(); } public static Car getTesla(){ return new Wuling(); } }
package factory.simple; public class Tesla implements Car { @Override public void name() { System.out.println("伪神特斯拉!"); } }
package factory.simple; public class Wuling implements Car { @Override public void name() { System.out.println("五菱神车"); } }
package factory.simple; public class Consumer { public static void main(String[] args) { //1, 口 所有的实现类! // Car car = new Wuling(); // Car car2 = new Tesla(); // 2,使用工厂创建 Car car = CarFactory.getCar("五菱"); Car car2 = CarFactory.getCar("特斯拉"); car.name(); car2.name(); } }
用来生产同一等级结构中的固定产品(支持增加任意产品)
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
package factory.method; public interface Car { void name(); }
package factory.method; //工厂方法模式 public interface CarFactory { Car getCar(); }
package factory.method; public class Tesla implements Car { @Override public void name() { System.out.println("伪神特斯拉!"); } }
package factory.method; public class WulingFactory implements CarFactory { @Override public Car getCar() { return new Wuling(); } }
package factory.method; import factory.simple.CarFactory; public class Consumer { public static void main(String[] args) { Car car = new WulingFactory().getCar(); Car car1 = new TeslaFactory().getCar(); Car car2 = new MoBaiFactory().getCar(); car.name(); car1.name(); car2.name(); } //结构复杂度: simple //代码复杂度: simple //编程复杂度; simple //管理复杂度; simple //根据设计原则: 工厂方法模式! //根据实际业务: 简单工厂模式! }
标签:依赖 工厂方法模式 迪米特法则 抽象工厂 陌生人 over null oop 管理
原文地址:https://www.cnblogs.com/yppaopao/p/13162015.html