• 06建造者模式Builder


    一、什么是建造者模式

      Builder模式也叫建造者模式或者生成器模式, 是由GoF提出的23种设计模式中的一种。

      Builder模式是一种对象创建型模式之一,用来 隐藏复合对象的创建过程,它把复合对象的创建 过程加以抽象,通过子类继承和重载的方式,动 态地创建具有复合属性的对象。

    二、建造者模式的结构

    三、建造者模式应用场景

      - 对象的创建:Builder模式是为对象的创建而设计的模式

      - 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象

      - 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法

    房子

     1 /*
     2  * 房子
     3  */
     4 public class House {
     5     // 地板
     6     private String floor;
     7     //
     8     private String wall;
     9     // 屋顶
    10     private String housetop;
    11 
    12     public String getFloor() {
    13         return floor;
    14     }
    15 
    16     public void setFloor(String floor) {
    17         this.floor = floor;
    18     }
    19 
    20     public String getWall() {
    21         return wall;
    22     }
    23 
    24     public void setWall(String wall) {
    25         this.wall = wall;
    26     }
    27 
    28     public String getHousetop() {
    29         return housetop;
    30     }
    31 
    32     public void setHousetop(String housetop) {
    33         this.housetop = housetop;
    34     }
    35 }

    工程队

     1 /*
     2  * 工程队
     3  */
     4 public interface HouseBuilder {
     5     //修地板
     6     public void makeFloor();
     7     //修墙
     8     public void makeWall();
     9     //修屋顶
    10     public void makeHousetop();
    11     public House getHouse();
    12 }

     平房工程队  实现工程队

     1 /*
     2  * 平房工程队
     3  */
     4 public class PingFangBuilder implements HouseBuilder {
     5     House house = new House();
     6     
     7     public void makeFloor() {
     8         house.setFloor("平房-->地板");
     9     }
    10 
    11     public void makeHousetop() {
    12         house.setHousetop("平房-->房顶");
    13     }
    14 
    15     public void makeWall() {
    16         house.setWall("平房-->墙");
    17     }
    18 
    19     public House getHouse() {
    20         return house;
    21     }
    22 }

    测试

     1 public class MainClass {
     2 
     3     public static void main(String[] args) {
     4 //        //客户直接造房子
     5 //        House house = new House();
     6 //        house.setFloor("地板");
     7 //        house.setWall("墙");
     8 //        house.setHousetop("屋顶");
     9         
    10         
    11         //由工程队来修
    12         HouseBuilder builder = new GongyuBuilder();
    13         //设计者来做
    14         HouseDirector director = new HouseDirector();
    15         director.makeHouse(builder);
    16         
    17         House house = builder.getHouse();
    18         System.out.println(house.getFloor());
    19         System.out.println(house.getWall());
    20         System.out.println(house.getHousetop());
    21     }
    22 }

    设计

    1 //设计者
    2 public class HouseDirector {    
    3     
    4     public void makeHouse(HouseBuilder builder) {
    5         builder.makeFloor();
    6         builder.makeWall();
    7         builder.makeHousetop();
    8     }
    9 }

    公寓工程队  实现工程队

     1 //公寓建造者
     2 public class GongyuBuilder implements HouseBuilder{
     3     House house = new House();
     4     
     5     public House getHouse() {
     6         return house;
     7     }
     8 
     9     public void makeFloor() {
    10         house.setFloor("公寓-->地板");
    11     }
    12 
    13     public void makeHousetop() {
    14         house.setHousetop("公寓-->房顶");
    15     }
    16 
    17     public void makeWall() {
    18         house.setWall("公寓-->墙");
    19     }
    20 }
  • 相关阅读:
    vs2008下directx11环境配置 k
    sps2003通知实现技巧
    我勒个去,键盘按键坏了怎么办解决按键替换问题
    多重循环的退出问题 ifbreak
    【转】 星号的秘密
    ??运算符,你是干嘛用的
    【转】C++中的const
    性能测试基础知识
    Andriod Studio 运行kotlin main方法异常 Manifest merger failed with multiple errors
    Android 文本后面添加标签
  • 原文地址:https://www.cnblogs.com/justdoitba/p/9031965.html
Copyright © 2020-2023  润新知