• 易学设计模式看书笔记(6)



    四、创建者模式

    1.摩托车组装系统

    认为这些样例挺适合入门的,easy理解,
    看了之后大概是个什么样子的就有了印象。

    摩托车 = 车架 + 车轮 + 轮胎 + 发动机。

    首先设计摩托车类以及各零件类:

    摩托车类:
    public interface Motorcycle
    {
     void build();
    }
    public class Motorcycle1 implements Motorcycle
    {
     void build(){ Sysout.out.println("组装摩托车開始..."); }
    }
    
    下面是摩托车零件类:
    
    摩托车架类:
    public interface Carcase
    {
     void build();
    }
    
    public class Carcase1 implements Carcase
    {
     void build(){ Sysout.out.println("组装摩托车架開始..."); }
    }
    
    车轮类:
    public interface Wheel
    {
     void build();
    }
    
    public class Wheel1 implements Wheel
    {
     void build(){ Sysout.out.println("组装摩托车轮開始..."); }
    }
    
    轮胎类:
    public interface Tyre
    {
     void build();
    }
    
    public class Tyre1 implements Tyre
    {
     void build(){ Sysout.out.println("组装摩托轮胎開始..."); }
    }
    
    发动机类:
    public interface Engine
    {
     void build();
    }
    
    public class Engine1 implements Engine
    {
     void build(){ Sysout.out.println("组装发动机開始..."); }
    }

    然后设计一个仅仅负责定义创建方式的抽象工厂类:

    public interface Factory
    {
     Carcase createCarcase();//创建车架对象
     Wheel createWheel();//创建车轮对象
     Tyre createTyre();//创建轮胎对象
     Engine createEngine();//创建发动机对象
    }
    
    public class MotorcycleFactory implements Factory
    {
     publci Carcase createCarcase(){
      return new Carcase1();
     }
     Wheel createWheel(){
      return new Wheel1();
     };
     Tyre createTyre(){
      return new Tyre1();
     };
     Engine createEngine(){
      return new Engine1();
     };
    
    }

    用工厂方法模式和抽象工厂模式结合设计。代码例如以下:

    public class Client 
    {
     public static void main(String[] args) 
     {
      Factory factory = new MotorcycleFactory();
      Carcase carcase = factory.createCarcase();
      carcase.build();
      Wheel wheel = factory.createWhee();
      wheel.build();
      Tyre tyre = factory.createTyre();
      tyre.build();
      Engine engine = factory.CreateEngine();
      engine.build();
      //对摩托车零件进行组装
      return new Motorcycle1();
     }
    }

    这样子功能是实现了,可是感觉比較怪。存在一些问题:
    摩托车零件比較多,client组装比較麻烦,假设把摩托车的组装放在
    工厂里。那么工厂类也非常麻烦。
    解决的方法:
    继续划分职责,添加一个单独的类来负责摩托车的组装。

    添加一个组装类来负责产品的组装,工厂类仅仅负责创建,
    client直接调用组装类。

    添加的组装类

    public class Director
    {
     private Factory factory;
    
     public void Director(Factory factory){
      this.factory = factory;
     }
     
     public Motorcycle assembleMotorcycle(){
      Carcase carcase = factory.createCarcase();
      carcase.build();
      Wheel wheel = factory.createWhee();
      wheel.build();
      Tyre tyre = factory.createTyre();
      tyre.build();
      Engine engine = factory.CreateEngine();
      engine.build();
      //对摩托车零件进行组装
      return new Motorcycle1();
     }
    }

    这样client调用就简单了:

    public class Client
    {
     public static void main(String[] args){
      Directorr director = new Director( new MotorcycleFactory() );
      Motorcycle motorcycle = director.assembleMotorcycle();
     }
    }

    2.创建者模式简单介绍

    【定义】:
    创建者模式就是将一个复杂对象的创建与它的表示分离,
    是的相同的构建过程能够创建不同的表示。client不须要
    知道对象的创建细节。

    【原理】
    创建者模式主要由5部分组成:
    组装类、抽象创建者类 以及详细创建者类、抽象产品类 以及详细产品类。

    【使用时机】
    当系统须要创建一个复杂的对象。并且这个复杂的对象组装起来比較麻烦时。
    能够使用创建者模式。

    3.优缺点
    【长处】
    在创建者类中。client不再负责对象的创建和组装,而是把这个创建的责任交给
    详细的创建者类。吧组装的工作交给详细的组装类。client仅仅负责对象的调用。
    明白了各个类的职责。

    【缺点】
    尽管利用创建者模式能够创建出不同类型的产品,但假设产品之间的差异过大。则
    须要编写多个创建者类才干实现,这是假设结合工厂模式更好。

  • 相关阅读:
    【51nod】2590 持续讨伐
    【51nod】2589 快速讨伐
    【51nod】2606 Secondary Substring
    【LOJ】#3098. 「SNOI2019」纸牌
    【洛谷】P4202 [NOI2008]奥运物流
    【LOJ】#3103. 「JSOI2019」节日庆典
    【LOJ】#3102. 「JSOI2019」神经网络
    【洛谷】P5348 密码解锁
    【洛谷】P4883 mzf的考验
    【LOJ】#3101. 「JSOI2019」精准预测
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6816550.html
Copyright © 2020-2023  润新知