zoukankan      html  css  js  c++  java
  • 炒冷饭系列:设计模式 建造者模式

    摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢!

    亲爱我,孝何难;亲恶我,孝方贤。

    一、什么是建造者模式

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

    二、建造者模式的结构

         image

    三、建造者模式应用场景 及 实现

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

    House.java

    /**
     * 房子
     * 
     * @author Jeff Lee
     */
    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;
        }
    
    }

    HouseBuilder.java

    public interface HouseBuilder
    {
        //修房子
        public void makeFloor();
        //修墙
        public void makeWall();
        //修屋顶
        public void makeHouseTop();
        
        public House getHouse();
    }

    HouseDirector.java

    public class HouseDirector
    {
        private HouseBuilder builder;
        public HouseDirector(HouseBuilder builder)
        {
            this.builder = builder;
        }
        
        public void makeHouse()
        {
            builder.makeFloor();
            builder.makeHouseTop();
            builder.makeWall();
        }
    }

    具体实现类 :PingFangBuilder.java

    public class PingFangBuilder implements HouseBuilder
    { 
        House house = new House();
        
        @Override
        public void makeFloor()
        {
            house.setFloor("平房--屋顶");
        }
    
        @Override
        public void makeWall()
        {
            house.setWall("平房--墙");
        }
    
        @Override
        public void makeHouseTop()
        {
            house.setHousetop("平房--屋顶");
        }
        
        public House getHouse(){
            return this.house;
        }
    }

    测试类:MainClass.java

    public class MainClass
    {
        public static void main(String[] args)
        {
            HouseBuilder builder = new PingFangBuilder();
            HouseDirector director =  new HouseDirector(builder);
            director.makeHouse();
            
            House house = builder.getHouse();
            System.out.println(house.getFloor());
            System.out.println(house.getWall());
            System.out.println(house.getHousetop());
        }
    }

    注意:该模式如果新增产品,只需要相应增加具体HouseBuilder的实现即可

    四、感谢知识来源和小结

    来自:java设计模式

    如以上文章或链接对你有帮助的话,别忘了在文章按钮或到页面右下角点击 “赞一个” 按钮哦。你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

    亲有过 谏使更 怡吾色 柔吾声 谏不入 悦复谏 号泣随 挞无怨
  • 相关阅读:
    begin lydsy 2731
    关于js中this关键字的补充
    js中this关键字测试集锦
    js文件中函数前加分号和感叹号是什么意思?
    好用的wget命令从下载添加环境变量到各参数详解
    一个解析json串并组装echarts的option的函数解析
    oschina代码仓库远程push,pull免密实操总结
    yii 核心类classes.php详解(持续更新中...)
    yii2.0归档安装方法
    配置windows 系统PHP系统环境变量
  • 原文地址:https://www.cnblogs.com/Alandre/p/3873157.html
Copyright © 2011-2022 走看看