• 23种设计模式----------建造者模式


    建造者模式:像是模板方法模式的升级。也叫生成器模式。将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。其实就是创建一大类的东西, 但是具体又有些差异。

    在建造者模式中,一般有四个角色:

    1,Product产品类。

      该类一般实现了模板方法模式。

    2,Builder抽象的建造者。

      规范产品的组建,一般是由子类实现。

    3,ConcreteBuilder具体的建造者。

      实现抽象类定义的所有方法,并且可以返回一个组建好的具体对象。

    4,Director导演类(一般是包涵多种具体产品差异的方法)。

    大致示例代码:

    Product类:

    1 package com.yemaozi.builderpattern;
    2 
    3 public abstract class Product {
    4     //一般实现模板方法的抽象类。
    5 }

    具体的Product类:

    //ProductA
    package com.yemaozi.builderpattern;
    
    public class ProductA extends Product{
        public void doSomething(){
            
        }
    }
    //ProductB
    package com.yemaozi.builderpattern;
    
    public class ProductB extends Product{
        public void doSomethding(){
            
        }
    }

    建造器:

    1 package com.yemaozi.builderpattern;
    2 
    3 public interface Builder {
    4     //设置产品不同的方法
    5     public abstract void setPart();
    6     //构建产品
    7     public abstract Product builderProduct();
    8 }

    具体的建造器,具体的建造器个数与具体产品类的数目一致。

     1 //ConcreteBuilderA
     2 package com.yemaozi.builderpattern;
     3 
     4 public class ConcreteBuilderA implements Builder{
     5 
     6     Product p = new ProductA();
     7     
     8     public void setPart() {
     9     }
    10 
    11     public Product builderProduct() {
    12         return p;
    13     }
    14 }
    15 //ConcreteBuilderB
    16 package com.yemaozi.builderpattern;
    17 
    18 public class ConcreteBuilderB implements Builder{
    19 
    20     Product p = new ProductB();
    21     
    22     public void setPart() {
    23     }
    24     
    25     public Product builderProduct() {
    26         return p;
    27     }
    28 }

    导演类:导演类一般是为了预设置不同产品差异的,若是想得到对应的产品,直接到Director里获取,因为,该类就是为了生产出所有的产品,以供获取。导演类一般可以有多个。

     1 package com.yemaozi.builderpattern;
     2 
     3 public class Director {
     4     private Builder b1 = new ConcreteBuilderA();
     5     private Builder b2 = new ConcreteBuilderB();
     6     //构建A产品
     7     public Product getProductA(){
     8         b1.setPart();
     9         Product p = b1.builderProduct();
    10         return p;
    11     }
    12     //构建B产品
    13     public Product getProductB(){
    14         b2.setPart();
    15         return b2.builderProduct();
    16     }
    17 }

    此外,建造者模式还有一个重要的角色,就是零件(理解为产品类里的方法),建造者是通过零件的组装来创建对象。组装顺序不同(调用方法顺序不同),建造的对象就会有着差异,也是,建造者模式要表达的核心意义。说白了,建造者最主要的功能是基本方法的调用顺序的安排。

    和工厂模式的差异:

      工厂方法模式重点是创建。创建零件是它的主要职责,组装顺序不是它关心的。

      建造者模式重点是对已产生的零件进行组装。从而也达到创建对象的效果。

  • 相关阅读:
    Codeforces 994B. Knights of a Polygonal Table
    Codeforces 994A. Fingerprints
    Codeforces 988F. Rain and Umbrellas
    51nod 1158 全是1的最大子矩阵(单调栈 ,o(n*m))
    51nod 1102 面积最大的矩形 && 新疆大学OJ 1387: B.HUAWEI's billboard 【单调栈】+【拼凑段】(o(n) 或 o(nlog(n))
    Codeforces 988E. Divisibility by 25
    【复习资料】单片机与嵌入式系统原理及应用
    Codeforces 723D. Lakes in Berland
    Codeforces 986A. Fair(对物品bfs暴力求解)
    Codeforces 986B. Petr and Permutations(没想到这道2250分的题这么简单,早知道就先做了)
  • 原文地址:https://www.cnblogs.com/yemaozistar/p/4158764.html
Copyright © 2020-2023  润新知