美文网首页
设计模式—建造者

设计模式—建造者

作者: 君莫看 | 来源:发表于2018-01-17 15:57 被阅读0次

    1、定义

    建造者模式,将一个复杂对象的构建与它表示分离,使得同样的构建过程可以创建不同的表示。

    2、建造者UML

    建造者模式UML建模,来源与网络截取

    3、怎么来理解构造者呢?

    我们来举个例子,就以我的台式机组装电脑来说,案例就叫做Lawrence的电脑。首先电脑(Product)都是由显示器,主机,键盘,鼠标构成(Product属性),而这些部件又是必不可少的,所以可以抽取形成Builder;而我的显示器和主机都是DELL品牌的,键盘是樱桃的,鼠标是罗技的,这些其实就是Builer的一个具体实现即ConcreteBuilder;而这些部件到我的手里要形成一个可以运行的电脑,就需要将他们组装起来,这个过程就是Director;最后组装完毕的电脑也就是Product,下面按这个流程我们来实现下我们的代码。

    // Product
    public class Computer {
        public String mScreen = ""; // 显示器
        public String mMainframe = ""; // 主机
        public String mKeyboard = ""; // 键盘
        public String mMouse = ""; // 鼠标
    
        @Override
        public String toString() {
            return "Computer{" +
                    "显示器:'" + mScreen + '\'' +
                    ", 主机:'" + mMainframe + '\'' +
                    ", 键盘:'" + mKeyboard + '\'' +
                    ", 鼠标:'" + mMouse + '\'' +
                    '}';
        }
    }
    
    //Builder
    public abstract class ComputerBuilder {
        // 显示器
        abstract void buildScreen();
        // 主机
        abstract void buildMainframe();
        // 键盘
        abstract void buildKeyboard();
        // 鼠标
        abstract void buildMouse();
    }
    
    // ConcreteBuilder
    public class LawrenceComputerBuilder extends ComputerBuilder {
        private Computer mComputer = null;
    
        public LawrenceComputerBuilder() {
            mComputer = new Computer();
        }
    
        @Override
        void buildScreen() { mComputer.mScreen = "DELL显示器"; }
        @Override
        void buildMainframe() { mComputer.mMainframe = "DELL主机"; }
        @Override
        void buildKeyboard() { mComputer.mKeyboard = "樱桃机械键盘"; }
        @Override
        void buildMouse() { mComputer.mMouse = "罗技游戏鼠标"; }
    
        public Computer getProduct() { return mComputer; }
    }
    
    // Director
    public class ComputerDirector {
        public void construct(ComputerBuilder builder) {
            builder.buildScreen();
            builder.buildMainframe();
            builder.buildKeyboard();
            builder.buildMouse();
        }
    }
    

    测试代码:

    public static void builderTest() {
        // 创建构造器
        ComputerDirector computerDirector = new ComputerDirector();
        // 创建 Lawrence 电脑的构造方案
        LawrenceComputerBuilder lawrenceComputerBuilder = new LawrenceComputerBuilder();
        // 组装 电脑
        computerDirector.construct(lawrenceComputerBuilder);
        // 查看 成品电脑信息
        Computer lawrenceComputer = lawrenceComputerBuilder.getProduct();
        System.out.println(lawrenceComputer.toString());
    }
    

    运行结果:

    01-17 15:34:57.740 24051-24051/com.ktln.must I/System.out: Computer{显示器:'DELL显示器', 主机:'DELL主机', 键盘:'樱桃机械键盘', 鼠标:'罗技游戏鼠标'}
    

    4、构造者模式的优点

    • 构建流程统一化,不容易出现构建流程缺失
    • 将复杂的对象创建拆分,过程更加清晰


    这就是我对建造者模式的理解,同时附上一份chenssy的# 设计模式读书笔记-----建造者模式
    ,个人觉得chenssy分析的更加细致透彻,此文更多是作为自己的一份学习记录

    相关文章

      网友评论

          本文标题:设计模式—建造者

          本文链接:https://www.haomeiwen.com/subject/rkfuoxtx.html