建造者模式(Java)

来源:互联网 发布:ubuntu jdk 1.8 编辑:程序博客网 时间:2024/05/16 00:31

在建造者模式中,主要有四个角色
1 建造者(接口类),抽象出对象的构建过程
2 具体的建造者(实现建造者接口),实现不同的业务逻辑
3 指挥者,调用建造者来完成业务需求
4 产品,需要创建的对象

下面给出代码示例
Cai.java 建造者

package com.BuilderMode;/** *  建造者Builder * * 给出一个抽象接口,以规范产品对象的各个组成成分的建造。 * 这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建 */public interface Cai {    public void fangyan(); // 放盐    public void fangyou(); // 放油    public void jiashui(); // 加水,,,等等是做菜不可缺少的步骤}

Lisi.java 具体建造者

package com.BuilderMode;/** * ConcreteBuilder 具体建造者 * <p> * 实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 * 在建造过程完成后,提供产品的实例。 */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");    }}

Zhangsan.java 具体建造者

package com.BuilderMode;/** *  ConcreteBuilder 具体建造者 * *   实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 *   在建造过程完成后,提供产品的实例。 */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");    }}

Director.java 指挥者

package com.BuilderMode;/** *  Director 指导者 * * 调用具体建造者来创建复杂对象的各个部分, * 在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。 */public class Director {    Cai cai;    public Director(Cai cai) {        this.cai = cai;    }    public void zuocai() {        cai.fangyan();        cai.fangyou();        cai.jiashui();    }}

BuildModejava 产品

package com.BuilderMode;/** * 使用建造者模式的好处: * <p> * 1.使用建造者模式可以使客户端不必知道产品内部组成的细节。 * <p> * 2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。 * <p> * 3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。 * <p> * 使用建造模式的场合: * <p> * 1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。 * <p> * 2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。 */public class BuilderMode {    public static void test() {        Cai cai = new ZhangSan();// 张三做菜        Director d = new Director(cai); // 指挥者        d.zuocai();// 我要指挥者弄菜,其实指挥者叫张三弄菜去了。    }}
0 0
原创粉丝点击