zoukankan      html  css  js  c++  java
  • 易学设计模式看书笔记(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仅仅负责对象的调用。
    明白了各个类的职责。

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

  • 相关阅读:
    XML炸弹
    IP分片攻击——就是发送部分分片报文,让对方一直等待从而耗对方内存的DoS攻击
    灰色软件——广告软件,拨号软件,远程访问软件等
    rootkit——一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,一般都和木马、后门等其他恶意程序结合使用
    漏洞利用 Exploit---利用默认口令、IP假冒、应用漏洞
    SequenceFile文件
    随机森林和GBDT的几个核心问题
    机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
    直方图中最大矩形面积
    openMP多线程编程
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6816550.html
Copyright © 2011-2022 走看看