1,什么是建造者设计模式
建造者设计模式:构造流程与表现分离,使得相同的构造流程可以创建出不同的表示.
2,为什么要使用建造者设计模式
下面是我在网上找的汉堡的制作步骤.
First heat oven and Cook hamburger with onion(donn‘t forget add salt and pepper) Second Melt margarine, mix with flour, milk, and eggs and pour onto hamburger in pie pan Third Bake 25 minutes Then Remove from oven, top with sliced tomatoes, sprinkle with cheese After that Bake another five to eight minutes Finally Cool five minutes before eating
下面有我开始按照这个步骤做汉堡,
First heat oven and Cook hamburger with onion(donn‘t forget add salt and pepper) Second Melt margarine, mix with flour, milk, and eggs and pour onto hamburger in pie pan Third Bake 25 minutes Finally Cool five minutes before eating
这里我忘记了步骤
Then Remove from oven, top with sliced tomatoes, sprinkle with cheeseAfter thatBake another five to eight minutes
这就导致了汉堡做出来并没有那么美味.
我想我如果是麦当劳的员工肯定会被炒鱿鱼,呵呵...那为什么麦当劳的员工做汉堡很少有缺少步骤的情况发生?原因是他们规定很严,必须按照规定步骤制作汉堡,少了某个步骤就
会扣奖金或者被炒鱿鱼.而我自己在家做汉堡就不用担心这么多,少了某个步骤大不了重新做就可以了.
其实刚才所说的麦当劳汉堡制作过程就体现了建造者设计模式。为了不让制作过程缺少某个步骤,而且可以根据相同的制作步骤生产出不同的产品.
3,怎么使用建造者设计模式
UML类图
之前有讲到过依赖倒转原则,抽象不依赖于细节,细节要依赖于抽象.建造者设计模式也遵守了这个设计原则,在这实例中HamburgerBuilder和BeefHamburger,ChickenHamburger
这些是细节,Hamburger接口就是抽象。
具体实现代码:
Hamburger.interface
public interface Hamburger {
public void friststep();
public void secondstep();
public void thirdthstep();
public void fourthstep();
}
BeefHamburger.class
public class BeefHamburger implements Hamburger{
@Override
public void friststep() {
// TODO Auto-generated method stub
System.out.println("制作牛肉汉堡步骤一");
}
@Override
public void secondstep() {
// TODO Auto-generated method stub
System.out.println("制作牛肉汉堡步骤二");
}
@Override
public void thirdthstep() {
// TODO Auto-generated method stub
System.out.println("制作牛肉汉堡步骤三");
}
@Override
public void fourthstep() {
// TODO Auto-generated method stub
System.out.println("制作牛肉汉堡步骤四");
}
}
ChickenHamburger.class
public class ChickenHamburger implements Hamburger{
@Override
public void friststep() {
// TODO Auto-generated method stub
System.out.println("制作鸡肉汉堡步骤一");
}
@Override
public void secondstep() {
// TODO Auto-generated method stub
System.out.println("制作鸡肉汉堡步骤二");
}
@Override
public void thirdthstep() {
// TODO Auto-generated method stub
System.out.println("制作鸡肉汉堡步骤三");
}
@Override
public void fourthstep() {
// TODO Auto-generated method stub
System.out.println("制作鸡肉汉堡步骤四");
}
}
HamburgerBuilder.class
public class HamburgerBuilder {
public void createHamburger(Hamburger hamburger){
hamburger.friststep();
hamburger.secondstep();
hamburger.thirdthstep();
hamburger.fourthstep();
}
}
Main.class
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HamburgerBuilder hamburgerBuilder = new HamburgerBuilder();
hamburgerBuilder.createHamburger(new BeefHamburger());
hamburgerBuilder.createHamburger(new ChickenHamburger());
}
}
最后输出:
制作牛肉汉堡步骤一
制作牛肉汉堡步骤二
制作牛肉汉堡步骤三
制作牛肉汉堡步骤四
-----------------------------------
制作鸡肉汉堡步骤一
制作鸡肉汉堡步骤二
制作鸡肉汉堡步骤三
制作鸡肉汉堡步骤四