------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
使用场景:如果一个事物基本流程不变,但是里面具体实现的方法总是变化则使用建造者模式
优点:各个模块之间互相不影响,容易扩展
组成
1.Builder(抽象建造者)抽象的方法
2.ConcreteBuilder(具体建设者)具体的方法
3.Product(产品类)复杂对象
4.Director(导演类)调用建造者建造复杂对象
个人总结本人的创造习惯
1.创建复杂对象,各种属性和方法
2.创建抽象建造者,根据复杂对象创建(一般抽象或者接口)
3.创建具体建造者(实现接口,或者继承抽象类)
4.编写建造者创建的产品类导演类
问题描述建造一个房子,有窗户,门,地板,有好房子,和坏房子之分
1.产品类Product
//产品类 //房子 class House{ //具体属性门,窗,地板 private String door; private String wimdows; private String floor; //产品类特有方法 //设置门 public void setDoor(String door) { this.door = door; } //设置窗 public void setWimdows(String wimdows) { this.wimdows = wimdows; } //设置地板 public void setFloor(String floor) { this.floor = floor; } //显示房子 public void show(){ System.out.println("门:"+door); System.out.println("窗:"+wimdows); System.out.println("地板:"+floor); } }
2.抽象建造者Builder
//Builder //抽象建造者 //建造房子 abstract class MakeHouse{ public abstract void makeDoor();//建造门 public abstract void makeWindows();//建造窗 public abstract void makeFloor();//建造地板 public abstract House getHouse();//返回产品 }
3.具体建造者ConcreteBuilder
//ConcreteBuilder //具体建造者 //建造好房子 class MakeGoodHouse extends MakeHouse{ private House h = new House();//具体产品 public void makeDoor() {//建造豪华门 h.setDoor("好门"); } public void makeWindows() { //建造豪华窗 h.setWimdows("好窗户"); } public void makeFloor() {//建造豪华地板 h.setFloor("好地板"); } public House getHouse() {//返回好房子 return h; } } //建造坏房子 class MakeBadHouse extends MakeHouse{ private House h = new House() ;//坏房子产品 public void makeDoor() {//建造破门 h.setDoor("破门"); } public void makeWindows() {//建造破窗 h.setWimdows("破窗户"); } public void makeFloor() {//建造摸地板 h.setFloor("破地板"); } public House getHouse() {//返回破房子 return h; } }
4.创建导演类Director
//构造一个使用Builder接口的对象 //Director //导演类,利用抽象建造者生成房子对象 class Director{ private MakeHouse builder;//抽象建造者 //返回好房子方法 public House getGoodHouse(){ this.builder = new MakeGoodHouse();//向上转型,好房子建造者 builder.makeDoor(); builder.makeWindows(); builder.makeFloor(); return builder.getHouse();//返回好房子 } //返回坏房子方法 public House getBadHouse(){ this.builder = new MakeBadHouse();//向上转型,坏房子 builder.makeDoor(); builder.makeWindows(); builder.makeFloor(); return builder.getHouse();//返回坏房子 } }
public class Main { public static void main(String[] args) { Director d = new Director(); House good = d.getGoodHouse(); good.show(); House bad = d.getBadHouse(); bad.show(); } }
窗:好窗户
地板:好地板
门:破门
窗:破窗户
地板:破地板