java设计模式 建造模式_理解java设计模式之建造者模式
理解java设计模式之建造者模式
发布于 2020-12-10|
复制链接
摘记: 建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此, 建造者模式主要用来解决“对象部分”的需求变化。 这样可以对对象构造的过程进行更加精细的控制。
```java
package com.shejimoshi.create.Builder; ..
建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此, 建造者模式主要用来解决“对象部分”的需求变化。 这样可以对对象构造的过程进行更加精细的控制。
```java
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();
}
```
我们的抽象生成器派生出相应的子类,用来构造相应的实际使用类型
```java
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("画出瘦子的右腿");
}
}
```
```java
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("画出胖子的右腿");
}
}
```
我们的生成器交给指挥者来实现创建的动作
```java
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();
}
}
```
测试案例:
```java
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);
}
}
```
运行结果:
```java
画出一个瘦子的头
画出一个瘦子的身体
画出瘦子的左臂
画出瘦子的右臂
画出瘦子左腿
画出瘦子的右腿
==============================================================
画出一个胖子的头
画出一个胖子的身体
画出胖子的左臂
画出胖子的右臂
画出胖子左腿
画出胖子的右腿
```
java设计模式 建造模式_理解java设计模式之建造者模式相关推荐
- java的弱引用_理解Java中的弱引用(Weak Reference)
本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出, ...
- java中异常回收_理解Java垃圾回收
当程序创建对象.数组等引用类型的实体时,系统会在堆内存中为这一对象分配一块内存,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存就变成垃圾,等待垃圾回收机制进行回收.垃圾回收机制具 ...
- 每天学习一个设计模式(九):创建型之建造者模式
目录 一.基本概念 二.通俗解释 三.建造者模式详解 1.造车的例子 2.建造者模式的结构 3.建造者模式的优点 4.使用场景 5.注意事项 四.建造者模式的扩展和最佳实践 建造者模式的扩展 最佳实践 ...
- [转载] Java内存管理-你真的理解Java中的数据类型吗(十)
参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java execute 执行成功_【JAVA】设计模式之命令模式(Command模式)的使用分析
命令模式属于23种设计模式中行为模式中的一个,它也是一种简单实用非常普遍的设计模式. 首先看下GOF对命令模式的定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录 ...
- java消费者模式_基于Java 生产者消费者模式(详细分析)
生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...
- java 桥接模式_《JAVA与模式》之桥接模式
桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿. 桥接模式的做法是把变化部分抽象出来,使变化部 ...
- java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...
最新文章
- UE4用音乐音效,各种声音都有,比较全了
- java验证码局部刷新_JS局部刷新图形验证码
- 软考-信息系统项目管理师-知识管理
- 浅谈C/C++中的指针和数组(一)
- HTML+CSS+JS实现 ❤️酷炫HUD科幻数据屏幕动画界面❤️
- OpenCV成长之路:直线、轮廓的提取与描述
- android自学之旅——layout资源文件
- Linux系统C语言遍历系统文件系统,并查询其磁盘使用率(有效磁盘)
- 2N点实数序列为 N=64。用一个复数FFT程序,一次算出,并绘出。
- JavaScript的三种弹窗
- java cnzz_cnzz 模拟请求登录(传入url get data ) demo
- S3C2440c语言汇编传参点灯
- 元宇宙:不透明面纱下的“康德主义”
- 俄罗斯天才少女也选华为,22岁拿下世界编程冠军,同天队友也宣布加盟
- 业务连续性方案概述【9】
- 【常用代码03】去除a标签下划线
- 为什么PRD写的Low?你看图文、支付、数据、登录、按钮……藏了多少猫腻!(文末送44页淘宝PRD)...
- 拓扑绝缘体 量子计算机,物理所预言立方对称性破缺下的新型拓扑绝缘体材料...
- 转: 大年三十整理的asp.net资料!(经典)
- 微前端qiankun从搭建到部署的实践
热门文章
- 在STM32的官方库切换芯片型号
- php 判断分辨率做判断,PHP判断是否是成人照片或者裸照:基于皮肤像素点来检测图片裸照的类文件...
- mac安装python3.7_MAC 安装Python3.7
- C语言--学生管理系统--(完整代码)
- python生成器next_Python生成器生成next,python,yieldnext
- 1024程序员节:给DBA们的福音
- 带你学会区分Scheduled Thread Pool Executor 与Timer
- 从源码角度解析线程池中顶层接口和抽象类
- 小熊派开发板实践:智慧路灯沙箱实验之真实设备接入
- 让这家有12万名员工、1.7万种产品的钢铁厂平滑上云的黑科技是什么?