“戏”说设计模式——建造者模式

首先请出今天的主人公——“城市缔造者”建筑团队

“戏”说设计模式——建造者模式_第1张图片

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

我以前很喜欢玩《剑侠情缘网络版三》-剑网三,在这个古风游戏里,有很多不同的职业,玩家可以选择具有不同特色的职业游玩,但这些职业的区别很大,简单从武器上就能分辨出来比如说:万花武器——笔、少林武器——长棍、丐帮武器——短棒。我们无法使用出本职业外的其他职业的武器,那么我们的游戏设计师是怎么实现这一点的呢?

这边是建造者模式的应用,对复杂对象的构建与初始化。把复杂的构造过程从不同对象(武器)中抽象的展示出来,使得同样的构造方法能展示出不同的效果对象(武器)。

北京奥运会上鸟巢和水立方让世界惊叹中国人的智慧,那么我们是怎么建造的呢?

public interface Builder {
    void buildingName();//工程名
    void buildBase();//基础结构
    void buildHardware();//硬件设施
    void buildService();//服务设施
}

建筑施工方接口

public class Bird_nest_builder implements Builder {
    @Override
    public void buildingName() {
        System.out.println("【鸟巢】");
    }
    @Override
    public void buildBase() {
        System.out.println("浇筑地基,建造框架结构,混凝土搭建");
    }
    @Override
    public void buildHardware() {
        System.out.println("建设观众座椅,建造塑胶跑道,运动员休息室");
    }
    @Override
    public void buildService() {
        System.out.println("布置新闻中心,运动员服务中心,观众服务中心");
    }
}

public class Water_Cube_builder implements Builder {
    @Override
    public void buildingName() {
        System.out.println("【水立方】");
    }
    @Override
    public void buildBase() {
        System.out.println("浇筑地基,建造框架结构,混凝土搭建");
    }
    @Override
    public void buildHardware() {
        System.out.println("建设观众座椅,建造游泳池,运动员休息室");
    }
    @Override
    public void buildService() {
        System.out.println("布置新闻中心,运动员服务中心,观众服务中心");
    }
}

鸟巢和水立方的建筑工人,那么建设时,我还需要设计师来完成工程进程的推进,所以设计一个设计师类来实现

public class Designer {
    private Builder builder;

    public Designer(Builder builder) {
        this.builder = builder;
    }
    public void setBuilder(Builder builder) {
        this.builder = builder;
    }
    public void build(){
        builder.buildingName();
        System.out.println("【建筑工程开始】");
        builder.buildBase();
        builder.buildHardware();
        builder.buildService();
        System.out.println("【建筑工程结束】");
    }
}

我们可以看到,设计师在宏观上操控着整个施工队的建造流程,设计师并不在乎是哪个施工队来建筑,但施工进程是由他来控制的。

public class Client {
    public static void main(String[] args) {
        Builder bird_nest_builder = new Bird_nest_builder();//鸟巢建筑工人
        Builder water_Cube_builder = new Water_Cube_builder();//水立方建筑工人
        Designer designer = new Designer(bird_nest_builder);//设计师
        designer.build();
        designer.setBuilder(water_Cube_builder);
        designer.build();
    }
}

我们来看看成果

“戏”说设计模式——建造者模式_第2张图片

两个举世瞩目的工程终于完工了,对于复杂对象的构建,专业的建造团队显然是不可或缺的,尤其是产品内部组件间有某种关联性,构建的顺序性,所以我们把制造工序抽离出来交给了设计师(Designer),而产品各种制造工艺则被多态化交给不同的施工方(Builder)去完成,最终达成以相同的构造过程生产不同产品的展现的目的,工序不可乱,工艺不可缺。

 

“戏”说设计模式——建造者模式_第3张图片

 谢谢观看本文章,加个关注吧!

 

 

你可能感兴趣的:(“戏”说设计模式,“戏”说设计模式,“戏”说设计模式,设计模式,建造者模式)