设计模式之建造者模式

来源:互联网 发布:lol无限视距软件 编辑:程序博客网 时间:2024/06/05 11:09

1,什么是建造者设计模式

建造者设计模式:构造流程与表现分离,使得相同的构造流程可以创建出不同的表示.

2,为什么要使用建造者设计模式

下面是我在网上找的汉堡的制作步骤.

First heat oven and Cook hamburger with onion(donn‘t forget  add salt and pepper)SecondMelt margarine, mix with flour, milk, and eggs and pour onto hamburger in pie panThird Bake 25 minutes Then Remove from oven, top with sliced tomatoes, sprinkle with cheeseAfter thatBake another five to eight minutesFinally Cool five minutes before eating

下面有我开始按照这个步骤做汉堡,

First heat oven and Cook hamburger with onion(donn‘t forget  add salt and pepper)SecondMelt margarine, mix with flour, milk, and eggs and pour onto hamburger in pie panThird 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{@Overridepublic void friststep() {// TODO Auto-generated method stubSystem.out.println("制作牛肉汉堡步骤一");}@Overridepublic void secondstep() {// TODO Auto-generated method stubSystem.out.println("制作牛肉汉堡步骤二");}@Overridepublic void thirdthstep() {// TODO Auto-generated method stubSystem.out.println("制作牛肉汉堡步骤三");}@Overridepublic void fourthstep() {// TODO Auto-generated method stubSystem.out.println("制作牛肉汉堡步骤四");}}

ChickenHamburger.class

public class ChickenHamburger implements Hamburger{@Overridepublic void friststep() {// TODO Auto-generated method stubSystem.out.println("制作鸡肉汉堡步骤一");}@Overridepublic void secondstep() {// TODO Auto-generated method stubSystem.out.println("制作鸡肉汉堡步骤二");}@Overridepublic void thirdthstep() {// TODO Auto-generated method stubSystem.out.println("制作鸡肉汉堡步骤三");}@Overridepublic void fourthstep() {// TODO Auto-generated method stubSystem.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 stubHamburgerBuilder hamburgerBuilder = new HamburgerBuilder();hamburgerBuilder.createHamburger(new BeefHamburger());hamburgerBuilder.createHamburger(new ChickenHamburger());}}

最后输出:

制作牛肉汉堡步骤一
制作牛肉汉堡步骤二
制作牛肉汉堡步骤三
制作牛肉汉堡步骤四
-----------------------------------
制作鸡肉汉堡步骤一
制作鸡肉汉堡步骤二
制作鸡肉汉堡步骤三
制作鸡肉汉堡步骤四

原创粉丝点击