建造者模式(Builder Pattern)——举例
? ? 当做一种事情的步骤是必不可少的。也就是说做这种事情,所有的步骤是不会少的。但是这些事情的具体做法的步骤实现又是不一样的。 由每个个具体的对象去实现 。
? ? 比如做一道菜,放盐,油等这些都是不可少的,但是每个人放的量又不一样。
? ? 有的时候我们做的时候就可能会因为一件事情的步骤太多而忘记了做某个步骤,造成后面做出来的东西是不能用的。
? ? 建造者模式:它的原理就是像上面那样,为了避免忘记做某个步骤,我们把这些步骤都抽象出来到一个类里面,然后每个具体的实现都不得不去实现这些步骤(也就是一个方法一样吧),具体方法的实现是由每个具体类自己去 做的,如果就是这样,我们就会发现这时候,等于就是这个吃菜的人吧,他要对做菜的人说,放盐,放油,呵呵,这完全是没有必要的,所以在建造者模式当中还有一个重要的类,就是指挥者,它和客户和做菜人之间打交道,客户对着它说做菜,然后它在叫某个具体做菜的人去做咯。
? ? 粗略代码:
?
? ? 做菜所需要的步骤:
public interface Cai { public void fangyan(); //放盐 public void fangyou(); //放油 public void jiashui(); //加水,,,等等是做菜不可缺少的步骤 ....... }
?
有具体叫张三去做这个菜,每个人才做,放盐,放油,加水等都是不一样的,但是都必须做这样的步骤:
public class ZhangSan implements Cai { public void fangyan() { System.out.println("ZhangSanfangyan"); } public void fangyou() { System.out.println("ZhangSanfangyou"); } public void jiashui() { System.out.println("ZhangJiashui"); } }
?
有具体叫李四去做这个菜:
public class LiSi implements Cai { public void fangyan() { System.out.println("LiSi fangyan"); } public void fangyou() { System.out.println("LiSi fangyou"); } public void jiashui() { System.out.println("LiSi Jiashui"); } }
?
客户来了,不是说客户叫张三去做菜,然后放盐放油,放水,都客户叫这个指挥者做的事情:
public class Director { Cai cai; Public Director(Cai cai) { this.cai = cai; } public void zuocai() { cai.fangyan(); cai.fangyou(); cai.fangshui(); } }
?
客户调用:
public class test { public static void main(String[] args) { Cai cai = new ZhangSan();//张三做菜 Director d = new Director(cai); //指挥者 d.zuocai();//我要指挥者弄菜,其实指挥者叫张三弄菜去了。 } }