《JAVA与模式》之建造者模式
1.概念
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]
与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。
消费者最后是通过建造者得到产品而不是通过指导者,另外,消费者无法直接让建造者建造产品,这个可能是建造者跟工厂方法的最大区别
工厂方法是需求者可以直接接触到工厂对象,然后指派其生产。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
工厂方法角色
1.抽象产品
2.具体产品
3.抽象建造者
4.具体建造者
5.指挥者
消费者通过指挥者调动具体的建造者,生产具体产品
举个例子,我要装修房子,我请了一批工人,但是我不是搞设计的,所以我又请了装修公司的人(指挥者),让他们负责调度
工人(建造者),而这些工人是我介绍给指挥者的,最后通过工人的努力,得到我想要的效果(产品),这个产品是工人给你的,而不是设计师
设计师只负责设计,指挥工人而已
先看一个简单的实例
interface Product{
public void part1();
public void part2();
public void part3();
}
class ProductOne implements Product{
public void part1() {
System.out.println("ProductOne part1");
}
public void part2() {
System.out.println("ProductOne part2");
}
public void part3() {
System.out.println("ProductOne part3");
}
}
class ProductTwo implements Product{
public void part1() {
System.out.println("ProductTwo part1");
}
public void part2() {
System.out.println("ProductTwo part2");
}
public void part3() {
System.out.println("ProductTwo part3");
}
}
interface AbstractBuilder{
//获得建造好的产品
public Product getProduct();
//创建产品 好拗口 因为是生产产品 工厂模式?????
public void buildProduct();
}
class ProductTwoBuilder implements AbstractBuilder{
private Product product=new ProductTwo();
public void buildProduct() {
product.part1();
//product.part2();//不是所有的步骤都需要的
product.part3();
}
public Product getProduct() {
System.out.println("ProductTwo 生产完毕");
return this.product;
}
}
class ProductOneBuilder implements AbstractBuilder{
private Product product=new ProductOne();
public void buildProduct() {
product.part2();
product.part3();
}
public Product getProduct() {
System.out.println("ProductOne 生产完毕");
return this.product;
}
}
//指挥者 等同于抽象工厂中的 具体工厂
class Director {
private AbstractBuilder builder;
public Director(AbstractBuilder builder){
this.builder=builder;
}
public void construct(){
builder.buildProduct();
}
}
参考地址:
http://www.cnblogs.com/devinzhang/archive/2012/01/06/2314670.html
http://haolloyin.blog.51cto.com/1177454/333155
《JAVA与模式》之建造者模式的更多相关文章
- java设计模式-----6、建造者模式
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类 ...
- 【java设计模式】-05建造者模式
建造者模式 简述 建造者模式,是将一个复杂对象的创建和它的表示分离开来,这就使得同样的构建构成可以有不同的表示. 建造者模式是一步步构建一个复杂的对象,允许用户只需要指定复杂对象的类型和必要的内容就可 ...
- 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用
今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模 ...
- 【设计模式】 模式PK:工厂模式VS建造者模式
1.概述 工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象.我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方 ...
- 【设计模式】 模式PK:抽象工厂模式VS建造者模式
1.概述 抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可.而建造者模式则是要求按 ...
- Java设计模式(5)——创建型模式之建造者模式(Builder)
一.概述 概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.(与工厂类不同的是它用于创建复合对象) UML图 主要角色 抽象建造者(Builder)——规范建造方法与结果 ...
- Java设计模式之(建造者模式)
建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式通常包括下面几个角色: 1. builder:抽象建造者,给出一个抽象接口,以规范产品对象的各个组 ...
- java模式:建造者模式
我发现很多源码很喜欢用这个模式,比如spring cloud,spring framework. 建造者模式(Builder)用以构建各种各样的对象,主要功能就是代替对象的构造函数,更加自由化. 举个 ...
- Java设计模式学习记录-建造者模式
前言 今天周末,有小雨,正好也不用出门了,那就在家学习吧,经过了两周的面试,拿到了几个offer,但是都不是自己很想去的那种,要么就是几个人的初创小公司,要么就是开发企业内部系统的这种传统开发,感觉这 ...
- JAVA设计模式之【建造者模式】
建造者模式 建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品 角色 Builder抽象建造者 buildPartX getResult ConcreteBuilder具体建 ...
随机推荐
- Solidworks直接打开SWB文件报错怎么办
- C#.NET常见问题(FAQ)-public private protectd internal有什么区别
首先要区分public和private,这两个修饰符是最常用的.Public就是对外公开的,private就是对外不公开的(类内部可以使用),比如下面我定义一个类的实例,自动补全代码中只有public ...
- android studio开发的时候出现design editor is unavailable until after a successful project sync问题的解决方法
android studio设计界面的时候,出现了报错:design editor is unavailable until after a successful project sync,导致无法编 ...
- NSMutableURLRequest Http 请求 同步 异步
#pragma mark get country code//同步 -(void)getFKjsonCountryCode { dispatch_async(dispatch_get_global_q ...
- vcenter 5.1安装亲历
这一步死活提示nslookup 解析不了 ping的结果如下: 下载http://support.microsoft.com/kb/929852 工具 禁用IPv6即可,而且还需要在DNS中创建反向查 ...
- Centos7中安装Docker
1.配置docker镜像安装源 tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository ...
- Java 通配符匹配查找文件
比较了一下Java正则表达式与通配符之间的差别,很简单的进行了一下转化就行了.此外要注意String的replace和replaceAll的用法的含义,不要搞错了. 字符串匹配例子 String s ...
- win10 教育版本变专业版本
输入win10升级产品密匙:VK7JG-NPHTM-C97JM-9MPGT-3V66T.系统自动验证后依次点击下一步.始按钮kms激活
- Knockout学习之监控属性
监控属性 Knockout包含以下三个核心特性: 1.监控属性和依赖跟踪 2.显式绑定 3.模板 下面我们将学习这三点中的第一点,在这之前我们先研究下MVVM模式和视图模型的概念. MVVM和视图模型 ...
- \G 用法:查询结果按列打印
\G 用法:查询结果按列打印 \G 放到sql语句后,可以使每个字段打印到单独的行, 如: mysql \G; mysql> select * from t \G;*************** ...