设计模式创建型模式——建造者模式

1.模式的定义

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

使用建造者模式,用户只需指定需要建造的类型就可以得到它们,而无需知道具体的建造过程和细节。

2.模式的结构

建造者模式中的角色构成

建造者(Builder):为创建一个Product对象的各个部件指定的抽象接口

具体的建造者(ConcreteBuilder):实现Builder接口,构造和装配各个部件

产品(Product):具体的产品

指挥者(Director):用于构建一个使用Builder接口的对象

3.模式的实现

下面通过建造者模式来实现创建机器人的过程

机器人产品类 Robot.java

public class Robot {

    private String head;
    private String hand;
    private String foot;
    private String body;

    public String getHead() {
        return head;
    }

    public void setHead(String head) {
        this.head = head;
    }

    public String getHand() {
        return hand;
    }

    public void setHand(String hand) {
        this.hand = hand;
    }

    public String getFoot() {
        return foot;
    }

    public void setFoot(String foot) {
        this.foot = foot;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }
}

创建机器人对象的各个零部件的接口 IBuildRobot.java

public interface IBuildRobot {

    public void buildHead();
    public void buildHand();
    public void buildFoot();
    public void buildBody();
    public Robot createRobot();

}

创建具体的小型机器人的类 SmallRobotBuilder.java 

public class SmallRobotBuilder implements IBuildRobot {
    Robot robot;

    public SmallRobotBuilder(){
        robot = new Robot();
    }

    @Override
    public void buildHead(){
        robot.setHead("头:直径20cm的球体");
    }

    @Override
    public void buildHand(){
        robot.setHand("手:小型");
    }

    @Override
    public void buildFoot(){
        robot.setFoot("脚:小型");
    }

    @Override
    public void buildBody(){
        robot.setBody("躯干:宽20cm的正方体");
    }

    public Robot createRobot(){
        return robot;
    }

}

指挥者类 Director.java 

public class Director {
    public Robot createRobotByDirector(IBuildRobot robot){
        robot.buildBody();
        robot.buildFoot();
        robot.buildHand();
        robot.buildHead();
        return robot.createRobot();
    }

}

客户端类 FactoryTest.java

public class FactoryTest {

    public static void main(String[] args){
        Director director = new Director();
        Robot robot = director.createRobotByDirector(new SmallRobotBuilder());
        System.out.println(robot.getHead());
        System.out.println(robot.getHand());
        System.out.println(robot.getFoot());
        System.out.println(robot.getBody());
    }
    
}

运行结果

建造者模式通常用于构建一些复杂的对象,这些对象内部构建间的构造顺序通常是固定的,但对象内部的构建通常面临复杂的变化。由于建造者模式使建造代码和表示代码分离,所以若需改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。比如需要创建一个大型机器人,则可以在上述例子的基础上添加一个 LargeRobotBuilder.java 的类。

(声明:本文为个人学习笔记,部分观点非原创。如有问题,欢迎讨论。转载请注明出处https://me.csdn.net/Iris_LDDDD )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值