建造者模式
建造者模式
优缺点分析
代码演示
最原始的代码
public class CommonHouce extends Houce { @Override public void buildBasic() { System.out.println("普通房子打地基"); } @Override public void buildWall() { System.out.println("普通房子砌墙"); } @Override public void proofed() { System.out.println("普通房子盖房顶"); } } public abstract class Houce { public abstract void buildBasic(); public abstract void buildWall(); public abstract void proofed(); /*因为这三个方法有先后顺序,所以可以用一个方法包进去*/ public void build(){ buildBasic(); buildWall(); proofed(); } } public class Client { public static void main(String[] args) { CommonHouce commonHouce = new CommonHouce(); commonHouce.build(); /*产品与生产产品的过程耦合在一起,不好,这里加一个缓冲层,就是建造者模式*/ } }
优化过程
构造者模式,是一种对象构造模式。他可以将复杂对象的构造过程抽象出来,使得抽象过程的不同实现方法可以构造出不同的表现
它允许用户之通过制定复杂对象的类型和内容就可以构造他们,用户不需要知道内部的具体构造细节
建造者模式的四个角色:Product Builder ConcreteBuilder Director
指挥者的作用有两个:一个是隔离客户与对象的生产过程 一个是负责控制产品对象的生产过程。
public class House { /*此处为产品类*/ private String name; private int money; @Override public String toString() { return "House{" + "name='" + name + '\'' + ", money=" + money + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } } public abstract class HouseBuild { /*抽象的类,用来封装各种建房子的方法*/ private House house = new House(); public abstract void buildBasic(); public abstract void buildWall(); public abstract void proofed(); /*给出返回房子的方法*/ public House giveHouse(){ return house; } } package builder.improve; import builder.House; /*普通房子继承了建造房子,则有自己独有的建造过程*/ public class CommonHouse extends HouseBuild { @Override public void buildBasic() { System.out.println("普通房子打地基"); } @Override public void buildWall() { System.out.println("普通房子砌墙"); } @Override public void proofed() { System.out.println("普通房子盖房顶"); } } public class DesignHouse { /*与建造房子依赖关系*/ HouseBuild houseBuild=null; /*这里传入的是抽象类,但是我们在客户端可以直接写具体的实现类,这样的好处很多 * 可扩展性更强*/ public DesignHouse(HouseBuild houseBuild){ this.houseBuild=houseBuild; } public House getHouse(){ houseBuild.buildBasic(); houseBuild.buildWall(); houseBuild.proofed(); return houseBuild.giveHouse(); } } package builder.improve; public class Client { public static void main(String[] args) { CommonHou***monHouse = new CommonHouse(); DesignHouse designHouse = new DesignHou***monHouse); designHouse.getHouse(); /*需求更改后。例如要建立一个豪宅*/ /*新增一个豪宅房子,其他都不改变*/ BigHouse bigHouse = new BigHouse(); DesignHouse designHouse1 = new DesignHouse(bigHouse); designHouse1.getHouse(); House house = new House(); house.setName("主题房子"); house.setMoney(123333); } }
适用情景以及源码解析
StringBuilder里面利用到建造者模式
总结
UML类图好好学习,编码的时候思考下各种依赖关系的传递,这样进步的更加快!