理解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);
}
}
运行结果:
画出一个瘦子的头
画出一个瘦子的身体
画出瘦子的左臂
画出瘦子的右臂
画出瘦子左腿
画出瘦子的右腿
==============================================================
画出一个胖子的头
画出一个胖子的身体
画出胖子的左臂
画出胖子的右臂
画出胖子左腿
画出胖子的右腿
0
投稿
猜你喜欢
- java 工厂模式的实例详解工厂方法中的“工厂”和我们平常理解的一样:用于生产产品。而客户是要和产品打交道,所以工厂方法模式的意义在于把客户
- 各位亲们可以尝试以下代码:注:这里我就只有一个html标签对来说明问题了,首部之类的东西,自己添加。<html> &n
- Rmb.javapublic class Rmb { /** *人民币的基本信息和操作 *@auth
- [LeetCode] 5. Longest Palindromic Substring 最长回文子串Given a string
- 在POI的使用过程中,对大多数API User来说经常面临两个问题,这也是GridExcel致力解决的问题。问题1. 仅使用简单的导入导出功
- 介绍了图的最小生成树的概念,然后介绍了求最小生成树的两种算法:Prim算法和Kruskal算法的原理,最后提供了基于邻接矩阵和邻接链表的图对
- 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,
- 概念介绍不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。01. 强引用这个就
- 目录一、二叉树的顺序存储1.堆的存储方式2.下标关系二、堆(heap)1.概念2.大/小 根堆2.1小根堆2.2大根堆3.建堆操作3.1向下
- 一个非常简单的登录权限 * ,具体代码如下:以下代码是继承OncePerRequestFilter实现登录过滤的代码:/** * * @
- 一、Bundle进行IPC介绍四大组件中的三大组件(Activity、Service、Receiver)都是支持在Intent中传递Bund
- 这篇文章主要介绍了Java实现发送手机短信语音验证功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 命令模式命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳
- SpringBoot分离打Jar包的两种方式方式一:基于maven-jar-plugin此方式基于这个小伙伴的配置改的:https://ww
- 注:作者使用IDEA + Gradle注:需要有一定的java SpringBoot and SSM+Springcloud基础程序测试错误
- public static String toUtf8String(String s) {
- 前言应用系统需要通过Cache来缓存不经常改变得数据来提高系统性能和增加系统吞吐量,避免直接访问数据库等低速存储系统。缓存的数据通常存放在访
- 本文实例讲述了java实现简单的英文文本单词翻译器功能。分享给大家供大家参考,具体如下:直接上代码:package fanyi;import
- Spring的出现是为了简化 Java 程序开发,而 SpringBoot 的出现是为了简化 Spring 程序开发.SpringBoot
- 前言:小伙伴说能不能用springboot整合一下mybatis多数据源不使用JPA进行数据库连接操作。那么说干就干创建一个springbo