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电脑建造者,利于系统的扩展。

* 便于控制细节风险

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

【使用场景】

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

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

* 产品类较为复杂。

原文地址:https://www.cnblogs.com/HigginCui/p/6207690.html