网上看了很多对建造者模式的介绍,但是很多都很模糊,今天看到一个例子觉得很不错所以决定先从例子开始讲起再说理解
例子参考:https://blog.csdn.net/u010102390/article/details/80179754
-
步骤
- 电脑实例类
public class Human { private String head; private String body; private String hand; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getHand() { return hand; } public void setHand(String hand) { this.hand = hand; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; } } |
2.方法实现接口
public interface IBuildHuman { public void buildHead(); public void buildBody(); public void buildHand(); public void buildFoot(); public Human createHuman(); } |
3. 实现实例类,赋值
Human human;
public SmartManBuilder(){ human = new Human(); }
@Override public void buildHead() { human.setHead("智商180的头脑"); }
@Override public void buildBody() { human.setBody("新的身体");
}
@Override public void buildHand() { human.setHand("新的手"); }
@Override public void buildFoot() { human.setFoot("新的脚");
}
@Override public Human createHuman() { return human; }
}
|
4.Director类的创建方法执行创建电脑(创建类)
public Human createHumanByDirecotr(IBuildHuman bh){ bh.buildBody(); bh.buildFoot(); bh.buildHand(); bh.buildHead(); return bh.createHuman(); } |
5.这个director类呢,重点在于createHumanByDirecotr的参数是我们的造人标准的接口。这样一来,只要是实现了我们的这个接口的类,就都可以作为参数,我们刚刚不是造了一个高智商的人吗?那我们如果想造一个身体运动能力出色的人,也就是运动员,这个director也可以启动这个造人过程,只要我们把这个运动员的类先写好。我们来看看director是如何发挥的:
New Director来实现创建电脑
public static void main(String[] args){ Director director = new Director(); Human human = director.createHumanByDirecotr(new SmartManBuilder()); System.out.println(human.getHead()); System.out.println(human.getBody()); System.out.println(human.getHand()); System.out.println(human.getFoot()); }
|
自我理解:
- 用途
- 将一个复杂的构建与表示相分离,使得同样的构建过程可以创建不同的表示
- 当一些基本部件不变而组合经常发生变化的时候
- 优点
- 建造者独立,易扩展。
- 便于控制细节风险
- 缺点
- 产品必须有共同点,范围有限制。
- 如内部变化复杂,会有很多的建造类。
- 与工厂模式的区别
- 建造者模式更加关注与零件装配的顺序。
版权声明:本博客为记录本人自学感悟,内容大多从网上学习与整理所得,若侵权请告知!
https://mp.csdn.net/postedit/80365677