zoukankan      html  css  js  c++  java
  • 《JAVA与模式》之建造者模式

    1.概念

        将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]

        与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。

    消费者最后是通过建造者得到产品而不是通过指导者,另外,消费者无法直接让建造者建造产品,这个可能是建造者跟工厂方法的最大区别

    工厂方法是需求者可以直接接触到工厂对象,然后指派其生产。

      建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

    工厂方法角色

    1.抽象产品

    2.具体产品

    3.抽象建造者

    4.具体建造者

    5.指挥者

    消费者通过指挥者调动具体的建造者,生产具体产品

    举个例子,我要装修房子,我请了一批工人,但是我不是搞设计的,所以我又请了装修公司的人(指挥者),让他们负责调度

    工人(建造者),而这些工人是我介绍给指挥者的,最后通过工人的努力,得到我想要的效果(产品),这个产品是工人给你的,而不是设计师

    设计师只负责设计,指挥工人而已


    先看一个简单的实例

     1 interface Product{
     2     
     3     public void part1();
     4     public void part2();
     5     public void part3();
     6     
     7 }
     8 class ProductOne implements Product{
     9 
    10     public void part1() {
    11         System.out.println("ProductOne part1");
    12     }
    13     public void part2() {
    14         System.out.println("ProductOne part2");
    15     }
    16     public void part3() {
    17         System.out.println("ProductOne part3");
    18     }
    19 }
    20 class ProductTwo implements Product{
    21 
    22     public void part1() {
    23         System.out.println("ProductTwo part1");
    24     }
    25     public void part2() {
    26         System.out.println("ProductTwo part2");
    27     }
    28     public void part3() {
    29         System.out.println("ProductTwo part3");
    30     }
    31 }
    32 interface AbstractBuilder{
    33     
    34     //获得建造好的产品
    35     public Product getProduct();
    36     //创建产品 好拗口 因为是生产产品 工厂模式?????
    37     public void buildProduct();
    38 }
    39 
    40 class ProductTwoBuilder implements AbstractBuilder{
    41     private Product product=new ProductTwo();
    42     
    43     public void buildProduct() {
    44         product.part1();
    45         //product.part2();//不是所有的步骤都需要的
    46         product.part3();
    47     }
    48     public Product getProduct() {
    49         System.out.println("ProductTwo 生产完毕");
    50         return this.product;
    51     }
    52 }
    53 class ProductOneBuilder implements AbstractBuilder{
    54     private Product product=new ProductOne();
    55     public void buildProduct() {
    56         product.part2();
    57         product.part3();
    58     }
    59     public Product getProduct() {
    60         System.out.println("ProductOne 生产完毕");
    61         return this.product;
    62     }
    63 }
    64 //指挥者 等同于抽象工厂中的 具体工厂
    65 class Director {
    66     private AbstractBuilder builder;
    67     public Director(AbstractBuilder builder){
    68         
    69         this.builder=builder;
    70     }
    71     public void construct(){
    72         
    73         builder.buildProduct();
    74     }
    75     
    76 }

    参考地址:
    http://www.cnblogs.com/devinzhang/archive/2012/01/06/2314670.html
    http://haolloyin.blog.51cto.com/1177454/333155

  • 相关阅读:
    设计模式 : Template method 模板方法模式 -- 行为型
    设计模式:Strategy 策略模式 -- 行为型
    没有评审的技术都是扯淡
    TCP/IP 协议大致的概念
    HTTP 2.0 与 tomcat
    相对URL拼接为绝对URL的过程
    URI与URL区别
    《淘宝首页性能优化实践》文章阅读
    第一章 Linux内核简介
    vim中执行shell命令小结
  • 原文地址:https://www.cnblogs.com/draem0507/p/3797182.html
Copyright © 2011-2022 走看看