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

大话设计模式-类图

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

/**
* 所有建造过程不同的方法均定义在接口里
*/
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. 如何学习LoadRunner性能测试?

    最近组内同事针对性能测试LR的脚本部分做了介绍,是个不错的分享.会后反思自己也有很长一段时间没做性能测试了,根据以往的经验,有必要做些整理和补充,本文主要介绍一些Loadrunner性能测试的学习方法 ...

  2. Spring bean 生命周期验证

    一.从源码注释看bean生命周期 从JDK源码上看,BeanFactory实现类需要支持Bean的完整生命周期,完整的初始化方法及其标准顺序(格式:接口 方法)为: 1.BeanNameAware s ...

  3. LeetCode 697. Degree of an Array (数组的度)

    Given a non-empty array of non-negative integers nums, the degree of this array is defined as the ma ...

  4. iOS 之 protocol的相关问题

    定义一个协议, 一个协议可以扩展子另一个协议 如果需要扩展多个协议中间使用逗号分隔 //定义一个协议 @protocol AnimalDelegate <NSObject, ***> @r ...

  5. Java基础笔记13

    1.集合与对象数组的区别 集合与对象数组共同点:都是存放对象的容器: 区别在于:①集合是没有长度限制的:②集合容器中没有类型的限制. 2.集合(都在Java.util包下) 常用的集合:Collect ...

  6. Vue源码后记-vFor列表渲染(3)

    这一节肯定能完! 经过DOM字符串的AST转化,再通过render变成vnode,最后就剩下patch到页面上了. render函数跑完应该是在这里: function mountComponent( ...

  7. python自动化运维七:fabric

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } p { margin-bottom: 0.25cm; line-height: 12 ...

  8. Quart.Net分布式任务管理平台(续)

           感谢@Taking园友得建议,我这边确实多做了一步上传,导致后面还需处理同步上传到其他服务器来支持分布式得操作.所有才有了上篇文章得完善. 首先看一下新的项目结构图: 这个图和上篇文章中 ...

  9. asp.net core webapi文件上传

    最近开发一个新项目,使用了asp.net core 2.0,采用webapi开发后台,postgresql为数据库.最先来的问题就是上传文件的问题. POST文件的一些坑 使用默认模板创建webapi ...

  10. 【经验分享(续篇)】Trachtenberg system(特拉亨伯格速算系统)

    之前有篇文章简单地介绍了Trachtenberg系统的乘法计算方法,地址在这里.针对一些特定的数字,Trachtenberg还发展出了更快的计算方法. 先来介绍乘数为11的速算方法.它的计算规则我们可 ...