23种设计模式之工厂模式

    技术2022-07-11  79

    工厂模式

    作用:

    创建者和调用者分离

    详细分类:

    简单工厂模式工厂方法模式抽象工厂模式

    使用面向对象的原则:

    开闭原则:对扩展开放,对修改关闭依赖倒转原则:要针对接口编程,不要针对实现编程迪米特原则:只与你直接的朋友通信,而避免与陌生人通信

    核心本质:

    实例化对象不需要new类 ,用工厂方法代替。将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

    分类:

    简单工厂模式:

    用来生产统一等级结构中的任意产品(增加新的产品,需要修改已有代码)

    1.定义一个产品接口

    /* 产品接口 */ public interface Car { //方法 public void produce(); }

    2.创建产品的实现类,实现具体产品的生产

    /* 产品的实现类 */ public class HongQI implements Car { @Override public void produce() { System.out.println("制作红旗"); } } /* 产品的实现类 */ public class BiYaDi implements Car { @Override public void produce() { System.out.println("制作比亚迪"); } }

    3.原有的方式需要了解接口和所有的实现类(不推荐)

    /* 以前需要了解接口和所有的实现类! */ public class Consumer { public static void main(String[] args) { Car car =new HongQI(); Car car2 =new BiYaDi(); car.produce(); car2.produce(); } }

    4.创建工厂,根据传入参数的不同,调用不同的具体产品类(推荐)

    /* 工厂 */ public class CarFactory { public static Car getCar(String car){ if (car.equals("HongQi")){ return new HongQI(); }else if (car.equals("BiYaDi")){ return new BiYaDi(); }else { return null; } } }

    5.用户直接调用工厂类的方法,只需要传入自己想要的产品就能确定生产哪样产品

    /* 使用工厂创建 */ public class Consumer { public static void main(String[] args) { Car car = CarFactory.getCar("HongQi"); Car car2 = CarFactory.getCar("BiYaDi"); car.produce(); car2.produce(); } }

    优点:简单易操作,比较好理解。 缺点:违反了开闭原则,即当我们给类增加新功能时,尽量不修改代码。

    工厂方法模式: -用来生产同一等级结构中的固定产品(支持增加任意产品)

    1.定义一个产品接口

    /* 产品接口 */ public interface Car { //方法 public void produce(); }

    2.创建产品的实现类,实现具体产品的生产

    /* 产品的实现类 */ public class HongQI implements Car { @Override public void produce() { System.out.println("制作红旗"); } } /* 产品的实现类 */ public class BiYaDi implements Car { @Override public void produce() { System.out.println("制作比亚迪"); } }

    3.定义一个工厂接口

    /* 工厂接口 */ public interface CarFactory { Car getCar(); }

    4.工厂实现类

    /* 工厂的实现类 */ public class HongQiFactory implements CarFactory { @Override public Car getCar() { return new HongQI(); } } /* 工厂的实现类 */ public class BiYaDiFactory implements CarFactory { @Override public Car getCar() { return new BiYaDi(); } }

    5.工厂方法模式

    /* 工厂方法模式 */ public class Consumer { public static void main(String[] args) { Car car = new BiYaDiFactory().getCar(); Car car2 = new HongQiFactory().getCar(); car.produce(); car2.produce(); } }

    优点:满足开闭原则 缺点:结构复杂、代码复杂、编程复杂、管理复杂

    总结:

    按设计原则,工厂方法模式按实际业务,简单工厂模式
    Processed: 0.016, SQL: 9