• 工厂方法模式


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

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

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

    需要什么汽车就要去对应的厂家(后者说是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();
              
        }
        
    }

    运行结果:

     

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

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

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

  • 相关阅读:
    玩转java多线程(wait和notifyAll的正确使用姿势)
    shell脚本编写之Hello World
    面试题录:数据库篇
    面试题录:笔试题篇
    浅谈String、StringBuffer与StringBuilder
    Java攻城狮面试题录:笔试篇(1)
    Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结
    TensorFlow从1到2(十五)(完结)在浏览器做机器学习
    TensorFlow从1到2(十四)评估器的使用和泰坦尼克号乘客分析
    TensorFlow从1到2(十二)生成对抗网络GAN和图片自动生成
  • 原文地址:https://www.cnblogs.com/toov5/p/9863147.html
Copyright © 2020-2023  润新知