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

简单工厂和工厂方法


一、核心本质

作用

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

核心本质:

  • 实例化对象不再使用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(); 
    } 
}

在这里插入图片描述

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

三、 总结

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38847154/article/details/108918935