学习设计模式也有一段时间了,两个多月了。在这段时间里面,我从设计模式里面感受到设计模式无穷的魅力,并且解决了我工作中自己所负责的一个令整个公司头痛的模块(这个模块在“观察者模式”会讲)。我从自己的亲身实践及感受中,发现当系统复杂到一定程度,已经不是技术能够解决的问题了,所以我们要学习设计模式。
我为了巩固《设计模式》的学习成果,从今天开始每天写一篇文章讲述一种设计模式,把自己的学习感受及心得全部写在上面,欢迎各位进行讨论,并指出,大家共同进步!
常用的Java设计模式有二十四种设计模式,我将在这连续的二十四天内,把这些设计模式都写在自己的博客中,以便自己以后查看和方便各位查看!
这二十四种设计模式,按设计模式的意图(即模式所想要解决的问题)可以分为三大类:1、创建类模式;2、结构类模式;3、行为类模式。我们首先来看下这三类设计模式分别包含了哪些设计模式:
1、创建类模式:生成器模式,单例模式,抽象工厂模式,简单工厂模式,原型模式;
2、结构类模式:适配器模式,桥接模式,组合模式,装饰器模式,外观模式,享元模式,代理模式;
3、行为类模式:责任链模式,命令模式,解释器模式,观察者模式,迭代器模式,协调者模式,状态模式,空对象模式,
备忘录模式,策略模式,模板方法模式,访问者模式。
接下来,开始我们的常用“设计模式之旅”。这篇文章,我们首先来讲“生成器模式”。
定义:将一个复杂对象的构建与它的表示分离,使得相同的构建可以创建出不同的表示。
意图:复杂对象中的一些子对象的创建过程经常发生剧烈的变化(比如创建算法里面有多个分支,根据不同的参数创建不同的子对象,而创建算法进行参数传递),而组合子对象为复杂对象的算法却相对的稳定。这时用“生成器”模式,我们就是用它来分离变化的部分和相对稳定的部分。其实我个人理解是它总的来说要保持客户端的一个稳定性!
类图:
涉及的角色:
1、Product :产品,其实就是复杂对象,是最终生产出来的对象
2、Builder :生成器接口或抽象类,里面主要是对复杂对象的子对象生成算法的描述;
3、ConcreteBuilderA :具体的一个生成器实现,里面实现了生成各子对象的各种算法;
4、Director :借助生成器做最后的复杂对象组合工作;
示例:我们以组装笔记本电脑为例进行举例,目前的笔记本电脑产商有:HP,DELL,Lenover,Accer等
package service;
/*
* @功能 这个接口的功能是说明各电脑生产商是怎么来取得各个部件(子对象)
*/
public interface Builder
{
//CPU
public void buildCPU();
//内存
public void buildRAM();
//硬盘
public void buildHDD();
//鼠标
public void buildMouse();
}
package impl;
import service.Builder;
/*
* 惠普公司的各电脑配件情况
*/
public class HPCompany implements Builder {
@Override
public void buildCPU()
{
System.out.println("CPU来自Intel");
}
@Override
public void buildHDD()
{
System.out.println("硬盘来自希捷");
}
@Override
public void buildMouse()
{
System.out.println("鼠标来自双飞燕");
}
@Override
public void buildRAM()
{
System.out.println("内存来自金士顿");
}
}
package impl;
import service.Builder;
/*
* 联想公司的电脑配件情况
*/
public class LenoverCompany implements Builder {
@Override
public void buildCPU()
{
System.out.println("CPU来自AMD");
}
@Override
public void buildHDD()
{
System.out.println("硬盘来自西数");
}
@Override
public void buildMouse()
{
System.out.println("鼠标来自双飞燕");
}
@Override
public void buildRAM()
{
System.out.println("内存来自威刚");
}
}
package impl;
import service.Builder;
public class Director
{
private Builder company;
public void getHoleComputer()
{
company.buildCPU();
company.buildHDD();
company.buildRAM();
company.buildMouse();
System.out.println("笔记本电脑组装完成");
}
public void setBuilder(Builder company)
{
this.company = company;
}
}
package client;
import impl.Director;
import impl.HPCompany;
import impl.LenoverCompany;
public class TestClient {
/**
* @param args
*/
public static void main(String[] args)
{
Director direc = new Director();
//先组装惠普的电脑
System.out.println("------先组装惠普的电脑");
direc.setBuilder(new HPCompany());
direc.getHoleComputer();
//再组装联想的电脑
System.out.println("\n------再组装联想的电脑");
direc.setBuilder(new LenoverCompany());
direc.getHoleComputer();
}
}
最后的输出结果如下:
总结:
1、生成器模式中有三种可变化的维度:子对象的生成算法、子对象的组合算法、子对象的数量,不管这三者中的哪一个
发生变化,客户端代码都是不会变化,所以这种设计模式很好地保证了客户端代码的稳定性!
2、生成器模式很好地将经常变化的部分(子对象的创建算法)与相对稳定的部分(子对象的组合算法)分离开来,保证了相对稳定算法代码的重用!
3、生成器模式与工厂模式的区别:1)工厂模式返回的是一个单一对象,而生成器模式返回的是对象的组合;2)工厂模式创建出来的对象之间不一定存在关系,但生成器模式创建的那些子对象之间是聚合关系
JDK中哪些用到生成器模式:
1)java.lang.StringBuilder#append();
2)java.lang.StringBuffer#append();
3)java.sql.PreparedStatement;
4)javax.swing.GroupLayout.Group#addComponent()
- 大小: 17.2 KB
- 大小: 9.4 KB
分享到:
相关推荐
今天我们将深入探讨其中的一种——生成器(Builder)模式。 生成器模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,同时隐藏了对象组装的细节。这种模式的核心思想是将产品的构造过程与产品本身分离,使...
生成器模式,也称为建造者模式,是一种设计模式,用于创建复杂对象,它允许你按照一系列步骤来构造对象,而这些步骤可以通过不同的实现来产生不同形式的对象。生成器模式的核心在于分离了对象的构造过程和表示细节,...
3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89...
### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...
工厂模式是一种常用的创建型设计模式,其核心思想是在不指定具体类的情况下创建对象。该模式通过提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,从而使客户端代码与实际创建的对象解耦。例如...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是软件工程领域中一个极为重要的概念,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式更是...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...
- **4.4 为什么使用设计模式——从Singleton模式谈起**:通过分析Singleton模式的特点和应用场景,探讨了设计模式的重要性和实用性。 #### 5. 总结 通过本文的学习,我们可以看到设计模式不仅是一种工具,更是一种...
### 设计模式精解——GoF23种设计模式解析及C实现 #### 一、引言 在软件工程领域,设计模式被视为一种重要的实践工具和技术。它可以帮助开发者解决常见的设计问题,并提供了一系列已被验证的有效解决方案。《设计...
第3章GoF-CreationalDesignPatterns创建型设计模式 23 3.1SimpleFactoryPattern(简单工厂模式) 24 3.1.1定义 24 3.1.2现实例子——国旗生产厂 26 3.1.3C#实例1——电子付款系统 26 3.1.4C#实例2——学校登录...
当设计类的构造函数或静态工厂具有多个参数时,Builder 模式是一个不错的选择。—— Effective Java,第二版,第39页背景在 Java 中实现 Builder 模式容易出错和重复。即使是一个简单的四字段类,最基本的构建器 ...
接下来,我们将进一步探索另一种创建型设计模式——Builder模式。 ### Builder模式简介 Builder模式是一种软件设计模式,它允许将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种...
- **4.4 为什么使用设计模式——从Singleton模式谈起**:这部分从Singleton模式出发,探讨了设计模式在软件开发中的重要性和必要性,以及如何正确地选择和使用设计模式。 #### 5. 附录 - **5.1 关于设计模式的思考...
### 设计模式精解——GoF23种设计模式解析 #### 0. 引言 ##### 0.1 设计模式解析(总序) 设计模式作为一种被广泛接受的软件设计指南,在软件工程领域占据着极其重要的地位。本书旨在深入探讨GoF(Gang of Four)...
### 设计模式精解——GoF 23种设计模式解析 #### 0. 引言 设计模式作为面向对象编程的重要组成部分,在软件工程领域扮演着至关重要的角色。本文档旨在通过对GoF(Gang of Four)提出的23种设计模式进行深度解析,...
### 设计模式与现实生活 设计模式是在软件开发过程中对常见问题的一种解决方案的总结,它能够帮助开发者更好地组织代码,提高程序的复用性、灵活性和扩展性。本文将结合生活中的例子来形象地阐述几种常见的设计模式...
第一部分 设计模式初体验第1章 你好,设计模式1.1 这是一本什么书1.2 开始前的准备1.3 预备知识1.4 似曾相识的设计1.5 设计模式的起源——模型、视图和控制器1.5.1 在模型对象中封装数据和基本行为1.5.2 使用视图...