设计模式之工厂模式(一)

    科技2022-07-14  134

    目录

    一、核心本质二、 代码实现2.1 简单工厂2.2 工厂方法代码实现 三、 总结

    简单工厂和工厂方法


    一、核心本质

    作用

    实现了创建者和调用者分离

    核心本质:

    实例化对象不再使用new,使用工厂方法代替将选择实现类,创建对象统一管理控制,从而将调用者跟我们实现类分离

    三种模式:

    简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要扩展已有代码)工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

    二、 代码实现

    2.1 简单工厂

    Car.interface

    package factory.simple; public interface Car { void name(); }

    Tesla.java

    package factory.simple; public class Tesla implements Car { @Override public void name() { System.out.println("Tesla"); } }

    WuLing.java

    package factory.simple; public class WuLing implements Car{ @Override public void name() { System.out.println("五菱宏光"); } }

    Dazhong.java

    package factory.simple; public class Dazhong implements Car { @Override public void name() { System.out.println("大众"); } }

    Consumer.java

    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 Tesla(); } }

    运行结果:


    2.2 工厂方法代码实现

    package factory.method; public interface Car { void name(); } package factory.method; //工厂方法模式 public interface Carfactory { Car getCar(); } package factory.method; public class MoBai implements Car { @Override public void name() { System.out.println("Mobai"); } } package factory.method; public class Tesla implements Car { @Override public void name() { System.out.println("Tesla"); } } package factory.method; public class WuLing implements Car { @Override public void name() { System.out.println("五菱宏光"); } } package factory.method; public class MoBaiFactory implements Carfactory { @Override public Car getCar(){ return new MoBai(); } } package factory.method; public class TeslaFactory implements Carfactory { @Override public Car getCar(){ return new Tesla(); } } 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 car2= new TeslaFactory().getCar(); Car car3=new MoBaiFactory().getCar(); car.name(); car2.name(); car3.name(); } }

    代码维护成本变高了,不用修改原代码了(解耦合)

    三、 总结

    Processed: 0.013, SQL: 8