Java设计模式之建造者模式的示例详解

网友投稿 277 2022-08-28


Java设计模式之建造者模式的示例详解

目录定义案例需求方案一方案二对比分析总结建造者模式的优势:注意点

定义

建造者模式(Builder Pattern),又叫生成器模式,是一种对象构建模式 它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可 以构建它们,用户不需要知道内部的具体构建细节。

案例

需求

女生每天化妆,假如只需要做发型,香水,衣服,并要求按照发型——》香水——》衣服的顺序进行,用代码实现

方案一

定义女生抽象类

/**

* 女生抽象类

* @author:liyajie

* @createTime:2022/2/16 10:20

* @version:1.0

*/

public abstract class AbstractWoman {

//设计发型

public abstract void buildHairstyle();

//使用香水

public abstract void buildPerfume();

//设计衣服

public abstract void buildClothing();

}

定义女生实现类

/**

* 女生实现类

* @author:liyajie

* @createTime:2022/2/16 10:21

* @version:1.0

*/

public class Woman extends AbstractWoman {

@Override

public void buildHairstyle() {

System.out.println("马尾造型");

}

@Override

public void buildPerfume() {

System.out.println("古龙香水");

}

@Override

public void buildClothing() {

System.out.println("海澜之家");

}

}

测试类

/**

* 测试类

* @author:liyajie

* @createTime:2022/2/15 16:35

* @version:1.0

*/

public class Test {

public static void main(String[] args) {

Woman woman = new Woman();

woman.buildHairstyle();

woman.buildPerfume();

woman.buildClothing();

System.out.println(woman);

}

}

查看测试结果

方案二

定义女生类

/**

* 女生化妆

* @author:liyajie

* @createTime:2022/2/15 15:40

* @version:1.0

*/

@Data

public class WomanNew {

// 发型

private String hairstyle;

// 香水

private String perfume;

// 服装

private String clothing;

//化完妆后的展示效果

public void show(){

System.out.println("化妆完成");

}

}

定义化妆师抽象类

/**

* 化妆师抽象类

* @author:liyajie

* @createTime:2022/2/15 15:58

* @version:1.0

*/

public abstract class AbstractDresserNew {

protected Woman woman = new Woman();

//设计发型

public abstract void buildHairstyle();

//使用香水

public abstract void buildPerfume();

//设计衣服

public abUCGKdnfstract void buildClothing();

public Woman getWoman(){

return woman;

}

}

定义具体的化妆师类

/**

* 具体的化妆师

* @author:liyajie

* @createTime:2022/2/15 16:17

* @version:1.0

*/

public class DresserNew extends AbstractDresserNew{

@Override

public void buildHairstyle() {

woman.setHairstyle("马尾造型");

}

@Override

public void buildPerfume() {

woman.setPerfume("古龙香水");

}

@Override

public void buildClothinhttp://g() {

woman.setClothing("海澜之家");

}

}

定义化妆总设计师类(指挥者)

/**

* 化妆总设计师(指挥者)

* @author:liyajie

* @createTime:2022/2/15 16:22

* @version:1.0

*/

public class DresserManage {

private AbstractDresser abstractDresser;

public DresserManage(AbstractDresser abstractDresser){

this.abstractDresser = abstractDresser;

}

public Woman makeUp(){

abstractDresser.buildHairstyle();

abstractDresser.buildPerfume();

abstractDresser.buildClothing();

return abstractDresser.getWoman();

}

}

定义测试类

/**

* 测试类

* @author:liyajie

* @createTime:2022/2/15 16:35

* @version:1.0

*/

public class TestNew {

public static void mainhttp://(String[] args) {

DresserNew dresser = new DresserNew();

DresserManage dresserManage = new DresserManage(dresser);

WomanNew womanNew = dresserManage.makeUp();

System.out.println(womanNew);

}

}

查看结果

对比分析

方案一:普通的实现方式,采用了继承抽象类的方式进行实现,耦合性非常高,不易扩展方案二:建造者模式,将女生和化妆师化妆进行了解耦合,并且易扩展,更换化妆师也很方便;并且有一个化妆总设计师作为指挥者的角色,可以方便的控制化妆的顺序,符合开闭原则

总结

建造者模式的优势:

将产品本身与产品的创建过程解耦合

扩展性很高,很方便的增加或者替换具体建造者

方便用程序来控制产品的创建过程以及顺序

指挥者类针对抽象建造者编程,系统扩展方便,符合开闭原则

注意点

建造者模式创建的产品一般组成部分类似,如果产品差异性非常大,不适合了,合理利用

如果产品内部变化复杂,导致系统非常庞大,权衡


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:利用jieba库进行词频统计(如何用jieba统计一篇文章的词频)
下一篇:【Python学习日志】 - Numpy包
相关文章

 发表评论

暂时没有评论,来抢沙发吧~