• 06_建造者模式


    【建造者模式】

    又称为生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    建造者模式中,主要有4个角色:

    1.Product产品类(例子中的Computer类)

    表示被构建的复杂对象(通常是实现了模板方法模式)。

    2.Builder抽象建造者类(例子中的Builder接口)

    规范产品的组装,一般由子类来实现。

    3.ConcreteBuilder具体建造者类(例子中的AsusComputerBuilder类)

    实现抽象建造者类的类,实现抽象建造者类(或接口)中的所有方法,并且返回一个组建好的对象(例子中的getProduct()方法)。

    4.Director导演类(例子中的Director类)

    构造一个使用Builder抽象类(或接口)的对象,返回一个创建好的产品。

    【建造者模式 例子】

    package com.Higgin.Builder;
    
    /**
     * PC产品
     */
    class Computer{
        private String mouse;  //鼠标
        private String keyBoard;  //键盘
        private String master;  //主机
        private String monitor;  //显示器
        
        public String getMouse() {
            return mouse;
        }
        public void setMouse(String mouse) {
            this.mouse = mouse;
        }
        public String getKeyBoard() {
            return keyBoard;
        }
        public void setKeyBoard(String keyBoard) {
            this.keyBoard = keyBoard;
        }
        public String getMaster() {
            return master;
        }
        public void setMaster(String master) {
            this.master = master;
        }
        public String getMonitor() {
            return monitor;
        }
        public void setMonitor(String monitor) {
            this.monitor = monitor;
        }
        @Override
        public String toString() {
            return "Computer [mouse=" + mouse + ", keyBoard=" + keyBoard
                    + ", master=" + master + ", monitor=" + monitor + "]";
        }
    }
    
    /**
     * 建造者 接口/抽象类 
     */
    interface Builder{
        public void buildMouse();
        public void buildKeyBoard();
        public void buildMaster();
        public void buildMonitror();
        
        public Computer getProduct(); 
    }
    /**
     * 具体建造者:华硕电脑建造者
    * (这里是组装电脑,主要是主机是华硕的就算是华硕电脑建造者,另外还可以添加弘基电脑建造者、苹果电脑建造者等等)
    */ class AsusComputerBuilder implements Builder{ private Computer computer=new Computer(); @Override public void buildMouse() { this.computer.setMouse("罗技鼠标"); } @Override public void buildKeyBoard() { this.computer.setKeyBoard("Cherry机械键盘"); } @Override public void buildMaster() { this.computer.setMaster("华硕主机"); } @Override public void buildMonitror() { this.computer.setMonitor("AOC显示器"); } @Override public Computer getProduct() { return this.computer; } } /** * 导演类 */ class Director{ public Computer constructComputer(Builder cb){ cb.buildMouse(); cb.buildKeyBoard(); cb.buildMaster(); cb.buildMonitror(); return cb.getProduct(); } } /** * 客户端类 */ public class TestBuilder { public static void main(String[] args) { Director director=new Director(); //先实例化一个导演类 Builder builder=new AsusComputerBuilder(); //然后实例化一个 华硕电脑建造者 Computer computer=director.constructComputer(builder); //调用导演类的创建PC方法 System.out.println(computer.toString()); //打印结果 } }

    【运行结果】

    【建造者模式 优点】

    * 封装性

    使用建造者模式可以使客户端不必知道产品内部组成的细节,如例子中我们不需要关心每一个具体模型内部是如何实现的,产生的对象类型就是Computer。

    * 建造者独立,容易扩展

    本例中是华硕电脑建造者AsusComputerBuilder,后面我们还可以添加苹果电脑建造者、IBM电脑建造者,利于系统的扩展。

    * 便于控制细节风险

    由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

    【使用场景】

    * 相同的方法,不同的执行硕勋,产生不同的事件结果时,可以采用建造者模式。

    * 多个部件或零件,都可以装配到一个对象中(如鼠标、键盘、主机、显示器转配成一台电脑),但是产生的运行结果又不用的时(使用不用的鼠标、键盘、主机...),可以使用该模式。

    * 产品类较为复杂。

  • 相关阅读:
    Cocos2d-x3.0游戏实例之《别救我》第四篇——乱入的主角
    TRIZ系列-创新原理-21-高速通过原理
    “cvSnakeImage”: 找不到标识符
    21世纪创业与知识之间的辩证关系
    Android导航栏ActionBar的具体分析
    HDU4565 && 2013年长沙邀请赛A题
    从切比雪夫不等式到大数定理
    在线笔试琐碎
    在线笔试琐碎
    算法求解中的变量、数组与数据结构(STL 中的容器)
  • 原文地址:https://www.cnblogs.com/HigginCui/p/6207690.html
Copyright © 2020-2023  润新知