zoukankan      html  css  js  c++  java
  • 设计模式(三):建造者模式

      

    建造者模式

    UML类图:

    说明:

      Director指挥者类可以调用所有建造者抽象类Builder1,Builder2,Builder3 ...

      每一个建造者抽象类Builder只生产一类产品,类中分别规定了生产各个构件的方法,及最后创建完整产品的方法。

      每一个建造者抽象类Builder都有对应的实现类ConcreteBuilder,在实现类中,实现Builder中的所有方法。

      Product产品类,主要包含组合产品构件方法、展示完整产品方法,是产品的表示。

     

    优点:

      ①因为将一个复杂产品的创建过程和其表示分离,使得同样的创建过程可以创建不同表示。

       用户不必知道复杂产品的内部构成,直接使用某一创建过程(建造者类)创建,之后,因为创建过程和表示是分离的,所以创建结果可以表示为不同的产品,

      ②每一个建造者类独立,方便调用、替换、增改。

      ③面对非常复杂的产品,可以将其创建步骤分解到不同的建造者中,清晰化创建过程,更加精确地控制复杂产品的创建过程。

    缺点:

      ①如果产品内部的变化或构成极其复杂,可能会需要定义很多建造者实现类(ConcreteBuilder)来实现这种变化,

       会导致系统变得很庞大,增加了系统的理解难度和运行成本,也不易维护

      ②只适用于同类产品(内部结构相同)的创建,如果产品内部的构成或变化差异很大,则不适用此模式。

    适用范围:创建具有复杂的内部结构,且内部属性本身相互依赖的产品。

     

    客户端:

      Director director = new Director(); //创建指挥者类

     

      Builder builder1 = new ConcreteBuilder1();  //选中一类具体产品,实例化其建造类ConcreteBuilder1

      director.construct1(builder1); //指挥者调用此建造类

      Product product = builder1.getProduct(); //建造类ConcreteBuilder1来生产完整的此类产品

      product.show(); //产品展示

     

      // 同一个Builder可以创建不同的具体产品

      Builder builder2 = new ConcreteBuilder2();  //选中另一类具体产品,实例化其建造类ConcreteBuilder2

      director.construct1(builder2);

      Product product2 = builder2.getProduct();

      product2.show();

     

      一句话概括:将一个复杂对象的构件和它的表示分离,使得同样的构建过程可以创建不同的表示

     

    /**
      * 建造者模式 :将一个复杂对象的构件与它的表示分离,使得同样的构建过程可以创建不同的表示
      * 
      * Builder                                BuilderOther                               (每个Builder只生产一类产品,包含生产各个构件的方法,及获取完整产品的方法)
      * ConcreteBuilder1  ConcreteBuilderImp2  ConcreteBuilderOther1  ConcreteBuilderOther2  (实现Builder的所有方法,会调用Product中的构件组合方法,以便创建产品)
      *
      * Director (选择生产哪种产品,指挥建造过程,即调用Builder中该产品各构件的产生方法)
      *
      * Product  (提供构件组合方法,并负责将实例化的产品展示)
      */
  • 相关阅读:
    psql: FATAL: index "pg_opclass_oid_index" contains unexpected zero page at block 0 以及错误 rm: cannot remove ‘base/90112/95992_fsm’: Structure needs cleaning
    rabbitmq centos 7.4 主备安装,加入主节点失败Error: unable to perform an operation on node 'rabbit@mq2'. Please see diagnostics information and suggestions below.
    Centos 7 查看显卡型号
    ORA-600 16703 SYS.TAB$表被删除
    linux orcal启动
    windows 下redis配置一主两从三哨兵模式以及springboot集成
    Spring定时任务service无法注入问题
    web缓存欺骗
    Automate Cache Poisoning Vulnerability
    bugbounty
  • 原文地址:https://www.cnblogs.com/shushengyou/p/9804314.html
Copyright © 2011-2022 走看看