工厂方法模式

之前的那个简单工厂 只有一个工厂啊 如果类型很多不利于扩展 因为类型多 责任重大啊  

工厂方法模式,相当于 根据产品做了分类  比如 比亚迪 里面有很多  比亚迪系列的 

这样有了个分类,大家看看代码,自己手动敲一敲:

需要什么汽车就要去对应的厂家(后者说是4S店)

工厂方法模式

什么是工厂方法模式

工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

这种比简单工厂模式的扩展性提升了很大呀;

看下结构:

定义产品接口:

package FactoryModel;

//汽车厂
public interface Car {
   void run();
}

实现产品的类:

package FactoryModel;

public class BydCar implements Car {

    @Override
    public void run() {
        System.out.println("比亚迪F3run");
        
    }
    
}
package FactoryModel;

public class BydCarE implements Car{
   @Override
public void run() {
    System.out.println("比亚迪E6run");
    
}
}
package FactoryModel;

public class JiLiCar implements Car {

     @Override
    public void run() {
        
       System.out.println("吉利帝豪run");    
    }
    
}

定义工厂接口:

package FactoryModel;

//汽车厂
public interface CarFactory {
   
   Car CreateCar(String name);
    
}

工厂接口的实现类(细分了):

1、比亚迪工厂(或者4S店)

package FactoryModel;

public class BydFactory implements CarFactory {
   
       @Override
    public Car CreateCar(String name) {
        if (name.equals("比亚迪F3")){   //里面有很多型号的
            return new BydCar();
        }
        if (name.equals("比亚迪E6")) {
            return new BydCarE();
            
        }
        return new BydCar();
    }
}

2、吉利工厂(或者4s店)

package FactoryModel;

public class JiLiFactory implements CarFactory {
  
      @Override
    public Car CreateCar(String name) {
        if (name.equals("吉利帝豪")) {
            return new JiLiCar();
        }  
        return new JiLiCar();
        
    } 
    
}

客户端;

package FactoryModel;

public class Client {

      public static void main(String[] args) {
       
        CarFactory bydFactory = new BydFactory();
        Car bydCar = bydFactory.CreateCar("比亚迪F2");
        bydCar.run();
        Car bydcarE = bydFactory.CreateCar("比亚迪E6");
        bydcarE.run();
        
        
        CarFactory  jiliFactory = new JiLiFactory();
        Car jiliCar = jiliFactory.CreateCar("吉利帝豪");
        jiliCar.run();
          
    }
    
}

运行结果:

 

工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现

优点  客户端不需要在负责对象的创建,从而明确了个各类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性

缺点 需要额外的编写代码 增加了工作量

原文地址:https://www.cnblogs.com/toov5/p/9863147.html