建造者模式
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; } }
我们这个时候就将需要的实体创建出来了,上面的逻辑也是写代码的逻辑。