版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wfy2695766757/article/details/86436753
首先请出今天的主人公——“城市缔造者”建筑团队
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,这就是对建造者模式简单的理解。
我以前很喜欢玩《剑侠情缘网络版三》-剑网三,在这个古风游戏里,有很多不同的职业,玩家可以选择具有不同特色的职业游玩,但这些职业的区别很大,简单从武器上就能分辨出来比如说:万花武器——笔、少林武器——长棍、丐帮武器——短棒。我们无法使用出本职业外的其他职业的武器,那么我们的游戏设计师是怎么实现这一点的呢?
这边是建造者模式的应用,对复杂对象的构建与初始化。把复杂的构造过程从不同对象(武器)中抽象的展示出来,使得同样的构造方法能展示出不同的效果对象(武器)。
北京奥运会上鸟巢和水立方让世界惊叹中国人的智慧,那么我们是怎么建造的呢?
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();
}
}
我们来看看成果
两个举世瞩目的工程终于完工了,对于复杂对象的构建,专业的建造团队显然是不可或缺的,尤其是产品内部组件间有某种关联性,构建的顺序性,所以我们把制造工序抽离出来交给了设计师(Designer),而产品各种制造工艺则被多态化交给不同的施工方(Builder)去完成,最终达成以相同的构造过程生产不同产品的展现的目的,工序不可乱,工艺不可缺。
谢谢观看本文章,加个关注吧!