博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建造者模式
阅读量:5458 次
发布时间:2019-06-15

本文共 2986 字,大约阅读时间需要 9 分钟。

1.使用场景:建造一个复杂的产品。

2.建造者模式的本质:分离了对象子组件 单独构造,从而造出复杂的对象。由于实现了构建和装配的的解耦。不同建造者,相同的装配,也可以做出不同的对象。

3.使用案例解释:

 案例概述:我们建造汽车,汽车有桌椅、轮胎和方向盘组成,我们将他们组装成汽车。

(1)首先从车入手,他需要桌椅、轮胎和方向盘。

package ke.test.gzz;/* * 创建汽车 * 我们需要轮胎座椅和方向盘 *  */public class Car {    private FangXpan fangXpan;    private Zhuoyi zhuoyi;    private LunTai lunTai;    public FangXpan getFangXpan() {        return fangXpan;    }    public void setFangXpan(FangXpan fangXpan) {        this.fangXpan = fangXpan;    }    public Zhuoyi getZhuoyi() {        return zhuoyi;    }    public void setZhuoyi(Zhuoyi zhuoyi) {        this.zhuoyi = zhuoyi;    }    public LunTai getLunTai() {        return lunTai;    }    public void setLunTai(LunTai lunTai) {        this.lunTai = lunTai;    }}

我们使用了方向盘等组件,这个时候我们创建出各个组件

轮胎类:

package ke.test.gzz;/* 轮胎类 */public class LunTai {     private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public LunTai(String name)    {        this.name = name;    }}

桌椅类:

package ke.test.gzz;public class Zhuoyi {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        public Zhuoyi(String name)    {        this.name =name;    }}

方向盘类:

package ke.test.gzz;public class FangXpan {    private String name ;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public FangXpan(String name) {        this.name = name;            }}

(2)我们已经知道了自己想要啥,我们可以将他们创建出来,并且是需要啥,创建啥。

package ke.test.gzz;public interface CarBuilder {    public FangXpan fangXpan();    public LunTai lunTai();    public Zhuoyi zhuoyi();}

我们创建出的东西需要组装

package ke.test.gzz;public interface  CarDirect {    Car createCar();}

(3)实现各个方法创建具体的组件,将图纸变为实物。

package ke.test.gzz;public class KwCarBuilder implements CarBuilder {    @Override    public FangXpan fangXpan() {        // TODO Auto-generated method stub        return new FangXpan("kwtest");    }    @Override    public LunTai lunTai() {        // TODO Auto-generated method stub        return new LunTai("kwluntai");    }    @Override    public Zhuoyi zhuoyi() {        // TODO Auto-generated method stub        return new Zhuoyi("kwzhuoyi");     }}

(4)实物有了按照图纸将其变为汽车

package ke.test.gzz;public class KwCarDirect implements CarDirect{    private CarBuilder carBuilder;        public void setCarBuilder(CarBuilder carBuilder) {        carBuilder = carBuilder;    }    @Override    public Car createCar() {        // TODO Auto-generated method stub        Zhuoyi zhuoyi = carBuilder.zhuoyi();        FangXpan fangXpan = carBuilder.fangXpan();        LunTai lunTai = carBuilder.lunTai();                Car car= new Car();        car.setFangXpan(fangXpan);        car.setLunTai(lunTai);        car.setZhuoyi(zhuoyi);                return car;    }}

我们这个时候就将需要的实体创建出来了,上面的逻辑也是写代码的逻辑。

 

转载于:https://www.cnblogs.com/kw28188151/p/8575089.html

你可能感兴趣的文章
第五章 循环结构反思
查看>>
WebConfig配置文件有哪些不为人知的秘密?
查看>>
自动控制原理的三不管地带之——开闭环函数特征方程原理
查看>>
HDU 2001 计算亮点间的距离
查看>>
spring学习笔记--quartz和定时任务执行
查看>>
ASP.NET页面刷新样式改变解决方法
查看>>
Redis- 简单操作命令
查看>>
洛谷 P2827 蚯蚓 解题报告
查看>>
考核题 6
查看>>
hadoop Datanode多目录配置
查看>>
一段获取windows环境变量的代码
查看>>
test
查看>>
MKReverseGeocoder 过时,IOS5中使用CLGeocoder
查看>>
@DataProvider Method 参数传递
查看>>
The Tao to Excellent 2
查看>>
Redis 命令
查看>>
Cocos2d-js 3.0 颜色变换(调整sprite/图片的色调)
查看>>
织梦仿站第一课
查看>>
java step1:基础知识3
查看>>
Hadoop 发行版本 Hortonworks 安装详解(二) 安装Ambari
查看>>