理解java设计模式之建造者模式
作者:cutter_point 发布时间:2023-03-13 14:48:55
标签:java,设计模式
建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此, 建造者模式主要用来解决“对象部分”的需求变化。 这样可以对对象构造的过程进行更加精细的控制。
package com.shejimoshi.create.Builder;
/**
* 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
* 适用性:
* 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
* 当构造过程必须允许被构造的对象有不同的表示时
*/
public abstract class PersonBuilder
{
//绘画一个人物需要使用到的工具
protected String tool1;
protected String tool2;
public PersonBuilder(String t1, String t2)
{
this.tool1 = t1;
this.tool2 = t2;
}
//绘画头
public abstract void buildHead();
//画身体
public abstract void buildBody();
//画左脚右脚
public abstract void buildArmLeft();
public abstract void buildArmRight();
//画左手右手
public abstract void buildLegLeft();
public abstract void buildLegRight();
}
我们的抽象生成器派生出相应的子类,用来构造相应的实际使用类型
package com.shejimoshi.create.Builder;
/**
* 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
* 适用性:
* 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
* 当构造过程必须允许被构造的对象有不同的表示时
*/
public class PersonThinBuilder extends PersonBuilder
{
public PersonThinBuilder(String t1, String t2)
{
super(t1, t2);
}
@Override
public void buildHead()
{
System.out.println("画出一个瘦子的头");
}
@Override
public void buildBody()
{
System.out.println("画出一个瘦子的身体");
}
@Override
public void buildArmLeft()
{
System.out.println("画出瘦子的左臂");
}
@Override
public void buildArmRight()
{
System.out.println("画出瘦子的右臂");
}
@Override
public void buildLegLeft()
{
System.out.println("画出瘦子左腿");
}
@Override
public void buildLegRight()
{
System.out.println("画出瘦子的右腿");
}
}
package com.shejimoshi.create.Builder;
/**
* 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
* 适用性:
* 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
* 当构造过程必须允许被构造的对象有不同的表示时
*/
public class PersonFatBuilder extends PersonBuilder
{
public PersonFatBuilder(String t1, String t2)
{
super(t1, t2);
}
@Override
public void buildHead()
{
System.out.println("画出一个胖子的头");
}
@Override
public void buildBody()
{
System.out.println("画出一个胖子的身体");
}
@Override
public void buildArmLeft()
{
System.out.println("画出胖子的左臂");
}
@Override
public void buildArmRight()
{
System.out.println("画出胖子的右臂");
}
@Override
public void buildLegLeft()
{
System.out.println("画出胖子左腿");
}
@Override
public void buildLegRight()
{
System.out.println("画出胖子的右腿");
}
}
我们的生成器交给指挥者来实现创建的动作
package com.shejimoshi.create.Builder;
/**
* 功能:创建人物的指挥者
*/
public class PersonDirector
{
private PersonBuilder pb;
//传递相应的人物创建模型
public PersonDirector(PersonBuilder pber)
{
this.pb = pber;
}
//创建一个人
public void createPerson()
{
pb.buildHead();
pb.buildBody();
pb.buildArmLeft();
pb.buildArmRight();
pb.buildLegLeft();
pb.buildLegRight();
}
}
测试案例:
package com.shejimoshi.create.Builder;
/**
* 功能:客户端程序
*/
public class Test
{
//创建相应的人物
public static void create(PersonBuilder pb)
{
//借助参数传过来的模型创建相应的对象
PersonDirector pd = new PersonDirector(pb);
pd.createPerson();
}
public static void main(String []args)
{
PersonThinBuilder ptb = new PersonThinBuilder("图像工具", "画笔");
create(ptb); //创建一个瘦子
System.out.println("==============================================================");
PersonFatBuilder pfb = new PersonFatBuilder("图像工具", "画笔");
create(pfb);
}
}
运行结果:
画出一个瘦子的头
画出一个瘦子的身体
画出瘦子的左臂
画出瘦子的右臂
画出瘦子左腿
画出瘦子的右腿
==============================================================
画出一个胖子的头
画出一个胖子的身体
画出胖子的左臂
画出胖子的右臂
画出胖子左腿
画出胖子的右腿


猜你喜欢
- 前言对于数组遍历,基本上每个开发者都写过,遍历本身没什么好说的,但是当我们在遍历的过程中,有一些复杂的业务逻辑时,将会发现代码的层级会逐渐加
- 1.构建springboot项目2.打包应用3.编写dockerfile4.构建镜像5.发布运行![root@localhost demo]
- ELK是三款软件的简称,分别是Elasticsearch、Logstash、Kibana组成,在发展的过程中,又有新成员Beats的加入,所
- 本文实例讲述了Android返回键功能的实现方法。分享给大家供大家参考。具体如下:在开发android应用时,常常通过按返回键(即keyCo
- JDK SPI是什么最近工作中听几个同事说了好几次SPI这个名词,虽然和我没关系,但是心里默默想还是学习一下,不然下次和我说到SPI,连是什
- 消息都是存放在一个消息队列中去,而消息循环线程就是围绕这个消息队列进入一个无限循环的,直到线程退出。如果队列中有消息,消息循环线程就会把它取
- 前言众所周知,随着Google I/O大会的召开,Google宣布将支持Kotlin作为Android的开发语言,最近几日,关于Kotlin
- 实例如下://选择文件,点击【浏览】,选择文件 private void button1_Click(object sender, Even
- 关于Spring Data JPA中自定义sql 条件的 in参数记录此文做一个记录,以便以后观看,也希望正在遇到同样问题的同学能有所启发,
- 茫茫人海千千万万,感谢这一秒你看到这里。希望我的能对你的有所帮助!共勉!愿你在未来的日子,保持热爱,奔赴山海!Java基础知识(多态)多态因
- 引言ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设
- 概要设计模式是一门艺术,如果真正了解这门艺术,你会发现,世界都将变得更加优美。定义定义一个用于创建对象的接口,让其子类去决定实例化那个类使用
- 所谓回调,就是客户程序C调用服务程序S中的某个方法A,然后S又在某个时候反过来调用C中的某个方法B,对于C来说,这个B便叫做回调方法。下面看
- 创建SpringBoot项目,启动后,默认的访问路径即主机IP+默认端口号8080:http://localhost:8080/此时,我们就
- 本文实例讲述了Android编程之SharedPreferences文件存储操作的方法。分享给大家供大家参考。具体分析如下:SharedPr
- 游戏介绍:拼图游戏是一款经典的益智游戏,游戏难度分为 简单、正常、困难 三种难度,分别对应3*3,4*4,5*5布局,游戏开始前图片被随机打
- 多数据源创建数据库CREATE DATABASE mybatis_plus_1;USE mybatis_plus_1;CREATE TABL
- 若 Spring 检测到 bean 实现了 Aware 接口,则会为其注入相应的依赖。所以通过让bean 实现 Aware 接口,则能在 b
- 一、引言大家都知道单例模式,通过一个全局变量来避免重复创建对象而产生的消耗,若系统存在大量的相似对象时,又该如何处理?参照单例模式,可通过对
- Spring MVC Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:收集、验证请求参