zoukankan      html  css  js  c++  java
  • Builder模式

    1.1.1       什么是建造者模式

    Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。
    Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

    1.1.2       建造者模式的结构

    Builder:为创建一个Product对象的各个部件制定抽象接口。
    ConcreteBuilder:具体的建造者,它负责真正的生产。
    Director:导演, 建造的执行者,它负责发布命令。
    Product:最终消费的产品。

    看图:

    1.1.1       建造者模式应用场景

    • 对象的创建:Builder模式是为对象的创建而设计的模式;
    •  创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象;
    •  关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法;

    1.1.2       实例

    package   dxz.pattern.builder;
    
    /*
     * 房子
     */
    public class House {
    
          // 地板
          private String floor;
    
          //
          private String wall;
    
          // 屋顶
          private String housetop;
    
          public String   getFloor() {
                return floor;
          }
    
          public void   setFloor(String floor) {
               this.floor = floor;
          }
    
          public String   getWall() {
               return wall;
          }
    
          public void   setWall(String wall) {
                this.wall = wall;
          }
    
          public String   getHousetop() {
                return housetop;
          }
    
    
          public void   setHousetop(String housetop) {
                this.housetop = housetop;
          }
     
    
    }
    
    package   dxz.pattern.builder;
    
    /*
     * 工程队
     */
    public interface HouseBuilder   {
    
          // 修地板
          public void makeFloor();
    
          // 修墙
          public void makeWall();
    
          // 修屋顶
          public void   makeHousetop();
          public House   getHouse();
    }
    
    package   dxz.pattern.builder;
    
    /*
     * 平房工程队
     */
    public class   PingFangBuilder implements HouseBuilder {
    
          House house = new House();
    
          public void makeFloor() {
                house.setFloor("平房-->地板");
          }
    
          public void makeHousetop()   {
                house.setHousetop("平房-->房顶");
          }
    
          public void makeWall() {
                house.setWall("平房-->墙");
          }
    
          public House   getHouse() {
                return house;
          }
    }
    
    package   dxz.pattern.builder;
    
    public class GongyuBuilder   implements HouseBuilder   {
          House house = new House();
    
          public House   getHouse() {
               return house;
          }
    
          public void makeFloor() {
                house.setFloor("公寓-->地板");
          }
    
          public void   makeHousetop() {
                house.setHousetop("公寓-->房顶");
          }
    
          public void makeWall() {
                house.setWall("公寓-->墙");
          }
    }
    
    package dxz.pattern.builder;
    
    public class HouseDirector   {
          public void   makeHouse(HouseBuilder builder) {
                builder.makeFloor();
                builder.makeWall();
                builder.makeHousetop();
          }
    }
    
    package   dxz.pattern.builder;
    
    public class MainClass {
    
    
          /**
           * @param args
          */
          public static void main(String[]   args) {
    
                // 客户直接造房子
                // House house = new House();
                // house.setFloor("地板");
                // house.setWall("墙");
               // house.setHousetop("屋顶");
    
              
                // 由工程队来修
                HouseBuilder builder = new   GongyuBuilder();
                // 房地产公司(设计者来做)
                HouseDirector director = new   HouseDirector();
                director.makeHouse(builder);
    
    
                House house = builder.getHouse();
                System.out.println(house.getFloor());
                System.out.println(house.getWall());
                System.out.println(house.getHousetop());
          }
    }
  • 相关阅读:
    无障碍开发(十五)之好心办坏事
    无障碍开发(十四)之Android /iOS平台无障碍功能
    无障碍开发(十三)之盲人是如何使用手机的之屏幕阅读器Screen Reader
    无障碍开发(十二)之怎样做好信息无障碍?
    LABjs学习(一)之无阻塞动态并行加载脚本文件以及管理执行顺序
    jQuery选择器引入
    面向对象-标准的手机类代码及其测试
    面向对象-this关键字的内存图解
    面向对象-this关键字的概述和应用
    第一个jQuery程序
  • 原文地址:https://www.cnblogs.com/duanxz/p/2532963.html
Copyright © 2011-2022 走看看