建造者模式,在笔者看来比较试用于,定制一个业务流程,而流程的细节又不尽相同,每个细节又必不可少,这时应考虑使用建造者模式。

大话设计模式-类图

先看下笔者写的一个简单的例子。

/**
* 所有建造过程不同的方法均定义在接口里
*/
public interface IMakePerson { public void makeHead(); public void makeBody(); public void makeHandle(); public void makeLeg(); public Person getResult();
}
/**
* 产品
*/
public class Person { List<String> personParts = new ArrayList<>(); public void add(String part) { personParts.add(part);
} public void show() { for (String part : personParts) {
System.out.print(part);
}
}
}
/**
* 指挥官,指挥具体创建小人的过程
*/
public class Director { public Person createPerson(IMakePerson makePerson) {
makePerson.makeHead();
makePerson.makeBody();
makePerson.makeHandle();
makePerson.makeLeg();
return makePerson.getResult();
}
}
/**
* 实现创建小人接口的具体创建小人类
*/
public class FatPerson implements IMakePerson{ private Person person = new Person(); @Override
public void makeHead() {
person.add("头 ");
} @Override
public void makeBody() {
person.add("胖身体 ");
} @Override
public void makeHandle() {
person.add("手 ");
} @Override
public void makeLeg() {
person.add("腿 ");
} @Override
public Person getResult() {
return person;
}
}
/**
* 实现创建小人接口的具体创建小人类
*/
public class ThinPerson implements IMakePerson{ private Person person = new Person(); @Override
public void makeHead() {
person.add("头 ");
} @Override
public void makeBody() {
person.add("瘦身体 ");
} @Override
public void makeHandle() {
person.add("手 ");
} @Override
public void makeLeg() {
person.add("腿 ");
} @Override
public Person getResult() {
return person;
}
}
/**
* 客户端
*/
public class Test { public static void main(String[] args) {
IMakePerson thinPerson = new ThinPerson();
Director director = new Director();
Person thinperson = director.createPerson(thinPerson);
thinperson.show(); System.out.println("\n---------------------------------------------"); IMakePerson FatPerson = new FatPerson();
Person fatperson = director.createPerson(FatPerson);
fatperson.show();
}
}

运行结果如下:

头    瘦身体    手    腿
---------------------------------------------
头 胖身体 手 腿

可以看出如果我们继续创建不同的小人,我们只需要在写一个小人类实现接口就可以了,这样我们可以稳定的创建小人,而不会造出残疾人。

实际工作中,很多流程都不尽相同,只是细节有区别,此时我们应采用建造者模式,来为不同的客户创建不同的稳定流程。

以上是笔者对建造者的理解,希望能帮助学习的小伙伴!

java 之 建造者模式(大话设计模式)的更多相关文章

  1. java 之 适配器模式(大话设计模式)

    适配器模式,笔者不是很推荐在项目初期阶段使用,在笔者看来这个设计模式就是套接了一层,从而达到能够迎合现有的外部接口规范. 先来简单的看下类图: 大话设计模式-类图 这个模式理解起来非常简单,A→B因为 ...

  2. java 之 单例模式(大话设计模式)

    笔者记得去面试时曾被问起这个模式,当时还没有看过设计模式,对设计模式基本上一无所知,不过可以肯定的是笔者用过单例模式.当时回答的风马牛不相及,很尴尬. 也是从那时起,开始学习设计模式.今天所说的就是单 ...

  3. Java之建造者模式(Builder Pattern)(转)

    1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者 ...

  4. java 之 代理模式(大话设计模式)

    java代理模式顾名思义,就类似于大学,我想和冰可乐,可是我又在玩游戏,于是我让我的室友帮我把可乐带回来,简单的来说我的室友就是代理,而买可乐就是需要做的行为.这是笔者理解的代理模式 大话设计模式-类 ...

  5. Java设计模式04:常用设计模式之建造者模式(创建型模式)

    1. Java之建造者模式(Builder Pattern) (1)概念:       将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [ 构建与表示分离, 同构建不同表示 ] ...

  6. Java设计模式14:建造者模式

    什么是建造者模式 发现很多框架的源码使用了建造者模式,看了一下觉得挺实用的,就写篇文章学习一下,顺便分享给大家. 建造者模式是什么呢?用一句话概括就是建造者模式的目的是为了分离对象的属性与创建过程,是 ...

  7. 大话设计模式(C#)

    还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 问个问题: 如何写出高质量的代码?灵活,可扩展,易读,易维护,可重构,可复用. ...

  8. 设计模式之第11章-建造者模式(Java实现)

    设计模式之第11章-建造者模式(Java实现) “那个餐厅我也是醉了...”“怎么了?”“上菜顺序啊,竟然先上甜品,然后是冷饮,再然后才是菜什么的,无语死了.”“这个顺序也有人这么点的啊.不过很少就是 ...

  9. java设计模式之建造者模式

    学习了设计模式,一直感觉有进步又没有进步,与同学.同事探讨了一下.变化不可能一会就可以的,需要努力坚持.不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好.还有几个设计模式一直没有写,原 ...

随机推荐

  1. Archlinux运行FlashTool

    首先,http://www.flashtool.net/index.php下载linux版的FlashTool,并且按照其说明在/etc/udev加入如下字段: SUBSYSTEM== »usb », ...

  2. PHP四种基本排序算法

    PHP的四种基本排序算法为:冒泡排序.插入排序.选择排序和快速排序. 下面是我整理出来的算法代码: 1. 冒泡排序: 思路:对数组进行多轮冒泡,每一轮对数组中的元素两两比较,调整位置,冒出一个最大的数 ...

  3. Hibernate映射类型

  4. Python函数篇:dict函数和列表生成式

    1.dict函数语法:dict()dict(**kwarg) dict(mapping, **kwarg) dict(iterable, **kwarg) 第一种:dict()构造一个空字典 h=di ...

  5. python基础知识——基于python3.6

    语法糖 # # -*- coding: utf-8 -*- # #------------- # #--------- 语法糖--------------- # #------------------ ...

  6. Python文件夹备份

    Python文件夹备份 import os,shutil def file_copy(path1,path2): f2 = [filename1 for filename1 in os.listdir ...

  7. ACID 数据库正确执行四要素

    ACID:数据库事务正确执行所必须满足的四个基本要素的缩写: 原子性(atomicity,或叫不可分割性),一致性(consistency),隔离性(isolation,又称独立性),持久性(dura ...

  8. IntelliJ配置jenkins服务的Crumb Data

    近期在做jenkins测试,IntelliJ并没有自动安装jenkins服务器,因此需要自己添加,但是如果不配置Crumb Data,jenkins的服务就不能使用. 首先在服务器中开启CSRF服务, ...

  9. Vue Elementui 如何让输入框每次自动聚焦

    在项目优化中碰到一个小问题,在每次提示框显示的时候让提示框中的输入框聚焦.如下图.一般情况下提示框是隐藏的.点击了编辑才会弹出. 那么原生属性autofocus 只在模板加载完成时起作用,也就是说只有 ...

  10. Ubuntu & Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...