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

    1、建造者模式

    (1)概念

    将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。建造者模式注重组装过程,而工厂方法模式更注重创建过程

    2、建造者模式的实现

    (1)UML

    (2)实现

    • 抽象建造者
    public interface TerrainBuilder {
        TerrainBuilder buildWall();
        TerrainBuilder buildFort();
        TerrainBuilder buildMine();
        Terrain build();
    }
    • 具体建造者
    public class ComplexTerrainBuilder implements TerrainBuilder {
        Terrain terrain = new Terrain();
    
        @Override
        public TerrainBuilder buildWall() {
            terrain.w = new Wall(10, 10, 50, 50);
            return this;
        }
    
        @Override
        public TerrainBuilder buildFort() {
            terrain.f = new Fort(10, 10, 50, 50);
            return this;
        }
    
        @Override
        public TerrainBuilder buildMine() {
            terrain.m = new Mine(10, 10, 50, 50);
            return this;
        }
    
        @Override
        public Terrain build() {
            return terrain;
        }
    }
    • 被建造对象
    public class Terrain {
        Wall w;
        Fort f;
        Mine m;
    }
    
    class Wall {
        int x, y, w, h;
    
        public Wall(int x, int y, int w, int h) {
            this.x = x;
            this.y = y;
            this.w = w;
            this.h = h;
        }
    }
    
    class Fort {
        int x, y, w, h;
    
        public Fort(int x, int y, int w, int h) {
            this.x = x;
            this.y = y;
            this.w = w;
            this.h = h;
        }
    
    }
    
    class Mine {
        int x, y, w, h;
    
        public Mine(int x, int y, int w, int h) {
            this.x = x;
            this.y = y;
            this.w = w;
            this.h = h;
        }
    }

    它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件

    • 指挥者

    调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息

     TerrainBuilder builder = new ComplexTerrainBuilder();
     Terrain t = builder.buildFort().buildMine().buildWall().build();

    3、在JDK中的运用

    StringBulider的append方法

    每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
  • 相关阅读:
    进程和程序的区别
    【Docker】5. 常用命令 — 镜像命令
    【Docker】4. 运行镜像的流程、docker工作原理
    【Docker】3. 配置阿里云镜像加速
    【Docker】2. Docker的架构介绍、安装与卸载 (CentOS 7)
    【Docker】Docker概述
    【Git】5. 远程库(GitHub)相关操作
    【Git】4. 团队内、跨团队协作机制
    【Git】3. Git重要特性-分支操作,合并冲突详解
    线性插值编写可视化代码
  • 原文地址:https://www.cnblogs.com/zhai1997/p/14423789.html
Copyright © 2011-2022 走看看