当做一种事情的步骤是必不可少的。也就是说做这种事情,所有的步骤是不会少的。但是这些事情的具体做法的步骤实现又是不一样的。 由每个个具体的对象去实现 。
比如做一道菜,放盐,油等这些都是不可少的,但是每个人放的量又不一样。
有的时候我们做的时候就可能会因为一件事情的步骤太多而忘记了做某个步骤,造成后面做出来的东西是不能用的。
建造者模式:它的原理就是像上面那样,为了避免忘记做某个步骤,我们把这些步骤都抽象出来到一个类里面,然后每个具体的实现都不得不去实现这些步骤(也就是一个方法一样吧),具体方法的实现是由每个具体类自己去 做的,如果就是这样,我们就会发现这时候,等于就是这个吃菜的人吧,他要对做菜的人说,放盐,放油,呵呵,这完全是没有必要的,所以在建造者模式当中还有一个重要的类,就是指挥者,它和客户和做菜人之间打交道,客户对着它说做菜,然后它在叫某个具体做菜的人去做咯。
粗略代码:
做菜所需要的步骤:
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();//我要指挥者弄菜,其实指挥者叫张三弄菜去了。
}
}
分享到:
相关推荐
3. **建造者模式(Builder Pattern)** 建造者模式是一种创建型设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在建造者模式中,我们创建一个指导对象(Director),它会使用一...
- **建造者模式(Builder Pattern)**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **原型模式(Prototype Pattern)**:通过复制一个现有对象实例来创建新的对象。 - **适配器...
如单例模式(Singleton)确保类只有一个实例,工厂模式(Factory Method)提供一个创建对象的接口,抽象工厂模式(Abstract Factory)用于创建相关或相互依赖的对象族,建造者模式(Builder)将复杂对象的构建与其...
- **结构**:包括一个产品类、一个抽象建造者类以及具体的建造者类。 - **优点**:允许逐步构建复杂的对象。 - **缺点**:增加更多的类,使得系统更加复杂。 #### PrototypePattern - **定义**:用原型实例指定...
生成器模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象。 生成器模式的四个要素 1. Builder:生成器接口,定义创建一个Product对象所需要的各个部件的操作。 2. ...
举例说明。 如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要...
举例说明。 如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要...