`

《设计模式解析》读书笔记

阅读更多
 
Facade模式
GoF模式中的定义:
为子系统中的一组接口提供一个统一的接口。Facade模式定义了一个更高层的接口,使子系统更容易使用。
 
通过Facade,我们将以一种更简单的方式来使用原有系统。例如:以二维方式使用一个三维绘图程序,或者我们只需要使用原系统的一个子集。
 
Facade模式与CAD/CAM问题的联系
封装V1系统
 
小结
 
 
 
Adapter模式
 
GoF中的叙述:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。
 
示例:
一个Shape基类,需要它的一个实现类Circle,要我自己实现这个Circle并不是一件容易的事情,幸运的是,Jill已经编写过
处理一个圆形的类,名为XXCircle。但我不能直接把这类加入我的继承体系中,因为XXCircle并没有实现Shape的方法并且
Jill不允许我修改XXCircle。我的处理方法只能是在XXCircle与Shape之间添加一个Adapter。
这个Adapter(Circle.class)继承了Shape并持有XXCircle的一个引用,在Adapter中实现Adapter和XXCircle的适配。
 
 
 
 
 
 
 
 
 
 
Adapter模式:关键特征
意图:使控制范围之外的一个原有对象与
 
 
 
Facade和Adapter的区别
Facade模式简化了接口,而Adapter模式则将一个已有接口转换成另一个接口。
Facade常常隐藏了多个类,而Adapter只隐藏了一个(但这并非本质差异)
 
策略模式
把Bridge模式去掉RefinedAbstraction就成了策略模式?
 
 
 
Bridge模式
 
GoF模式
将抽象与其实现解藕,使它们都可以独立地变化。
 
这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)
 

示例

 
多个形状
多个绘图程序
 
 

解决方案

使用继承的设计

一个替代方案

Bridge解决方案

Shape对象只需要知道drow这个动作
Circle需要知道自己是画圆
Rectangle需要知道自己是画线
 
Drawing对象为外界统一提供drawLine,drawCircle方法
 
 
 
 
组合爆炸
 
封装:数据隐藏,封装变化
 
 
“一条规则,实现一次”,密切留意重构的可能性。
 
 
Bridge模式:关键特性
意图:将一组实现与另一组使用它们的对象分离
问题:一个抽象类的派生类必须使用多个实现,但不能出现类数量爆炸性的增长。
 
 

面向对象原则

对象对自己负责
抽象类
通过抽象类进行封装
一条规则,实现一次
可测试性
 
 
开拓视野
 
 
 
Abstract Factory模式
GoF叙述:
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类
 
方案1:使用switch
方案2:使用继承
方案3:使用抽象来代替switch语句
 
switch语句可能说明需要抽象
 
 
 
 
 
 
 
 
 
 
 
用模式思考

专家的设计之道

1.从对整体的概念性理解开始,以理解需要实现的目标。
2.找到在整体中出现的模式
3.从为其他模式创造背景的那些模式开始
4.从背景向内:应用这些模式,找到新模式,并重复。
5.最后,通过每次应用一个模式,改进设计,并在所创建的背景中予以实现。
 
用模式进行思考的过程
1.找出模式。在问题域中找出模式。
2.分析和应用模式。对于要进行分析的模式集合,执行步骤2a到2d。
2a.按背景的创造顺序将模式排序。
2b.选择模式并扩展设计。根据排序,选择列表中的下一个模式,用它得到最高层的概念设计。
2c.找到其他模式。
2d.重复。
3.添加细节
 
考虑背景时使用的一条规则
 
系统中的一个模式经常与其他模式相关——它为系统中的这些其他模式提供背景。
寻找背景是一种非常基本的工具
 
 
Abstract Factory模式创造了相关对象(族)的集合。
Adapter模式是已有的类A能够适配使用类(using class)B所需要的接口
Bridge模式允许一组相关的使用对象(using object,此模式中抽象的具体类)使用不同实现。
Facade模式能够为使用类B简化已有系统A
 
 
 
规则:先考虑系统中需要什么,然后再去关注如何创建它们。
所以我们应该确定了对象是什么之后再定义工厂。
 
 
从总体概念开始,然后不断添加特性。
 
迈向新的设计方式

开闭原则

模块、方法和类应该对扩展开放,对修改封闭。
完全遵守开闭原则几乎是不可能的,但它可以作为一个目标,指引正确的方向。

从背景设计原则

 

封装变化原则

我的设计中有一个相似之处:继承层次中类很少超过两层。那些层次更多的设计往往是因为有的设计模式的结构要求有两层作为派生类的基础。
如果我出现了多层继承,几乎总是为了消除某种冗余。

抽象类与接口

接口和抽象类的区别:就是抽象类允许有公共的状态和行为。
 
 

理性怀疑原则











分析矩阵
步骤:
1.找到某种特定情况中最重要的特性,并用矩阵将它们组织起来。用特性所表示的概念为每个特性标记。
2.继续处理其他情况,按需要扩展这个矩阵。处理每一情况时应该独立于其他情况。
3.用新的概念扩展该分析矩阵。
4.用行发现规则。
5.用列来发现特定情况。
6a.从这种分析中确定模式:观察行
6b.从这种分析中确定模式:观察列
7.得到高层设计。


Observer模式
模式的分类
创建型
结构型
行为型
解藕型
国际电子商务案例的新需求
1.向消费者发送一封欢迎邮件
2.向邮局查证消费者的地址
观察者(observer):
目标(subject):触发事件的对象,例如Customer。
观察者负责了解自己观察的是什么
目标无需知道有哪些观察者依赖于自己
必须在目标中添加两个方法
attach(Oberser):注册观察者
detach(Oberser):删除观察者
每个Oberser类都要实现一个名为update
Observer模式非常有用,以至于Java在其util包中就实现了Observer模式。
Observable类:扮演Subject角色
Observer接口:扮演Observer角色
attach:addObserver
detach:deleteObservers
notifyObservers:notifyObervers
Template Method模式
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。不改变算法的结构而重新定义它的步骤。
各种工厂模式
工厂封装了创建对象的业务规则
工厂的含义
工厂是用来实例化其他对象的方法(静态或者非静态)、对象或者其他实体。
与工厂相关的模式(创建模式):
Abstract Factory
Builder
Factory Method
Prototype
Singleton
行为型模式用于封装行为的变化
结构型模式用于将已有的代码集成到新的面向对象设计中。
创建型模式用于管理对象的创建
工厂大背景:
规则:先考虑系统中需要什么,然后再去关注如何创建系统……也就是说。我们应该在确定了对象是什么以后再定义工厂。
工厂遵循我们的准则
开发分为以下两步的方法:
1.定义对象和它们的协作方式
2.编写为相应情况实例化对象并在对象共享时管理已有对象的工厂
步骤1中生成的代码无需操心哪个对象应该实例化,而步骤2中的代码则无需操心对象的协作方式。
规则:对象应该要么构造和/或管理其他对象,要么使用对象,而不应该兼而有之。
规则:先考虑系统中需要什么,然后再去关注如何创建系统……也就是说,我们应该在确定了对象是什么之后再定义工厂。
对象要么构造其他对象,要么使用其他对象,决不要两者兼顾
分享到:
评论
1 楼 quiii 2009-01-09  

相关推荐

    《宋红康_Java之23种设计模式解析》读书笔记.zip

    《宋红康_Java之23种设计模式解析》读书笔记

    读书笔记:常用设计模式解析包含 UML 类图及实现.zip

    读书笔记:常用设计模式解析包含 UML 类图及实现

    设计模式的读书总结笔记

    这篇“设计模式的读书总结笔记”是对设计模式深入理解和应用的结晶,包含对各种模式的实例解析、优缺点分析以及如何在实际项目中应用的指导。 一、设计模式的基本概念 设计模式并不直接提供代码实现,而是描述在...

    《Hear First设计模式》阅读笔记

    在阅读《Hear First设计模式》的过程中,我们可以了解到各个章节对不同设计模式的详细解析。 第一章可能介绍了设计模式的基本概念,包括模式的定义、分类以及为什么要在软件开发中使用设计模式。作者可能讨论了设计...

    java设计模式源码和笔记(第一部分)

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结,能够提升代码的可读性、可维护性和复用性...通过阅读笔记和运行源码,你可以更好地掌握这些经典的设计模式,提升你的Java编程能力。

    23种设计模式学习笔记

    设计模式是软件工程中的一种通用解决方案,它是在特定上下文中解决常见问题的经验总结。这个“23种设计模式学习笔记”文档将引导...通过阅读“设计模式学习笔记.doc”,你可以逐一了解并掌握这些模式的原理和使用场景。

    研磨设计模式[书签]

    这本书为读者提供了全面而详细的设计模式解析,帮助开发者提升代码质量和可维护性。 设计模式分为三类:创建型、结构型和行为型。创建型模式主要关注对象的创建过程,如单例模式、工厂方法模式和抽象工厂模式等,...

    golang-design-pattern:设计模式Golang实现-《研磨设计模式》读书笔记

    下面将详细讨论在标题"设计模式Golang实现-《研磨设计模式》读书笔记"中所涵盖的创建型模式、结构型模式和行为型模式。 1. 创建型模式: - 单例模式:确保一个类只有一个实例,并提供一个全局访问点。在Go中,...

    java源码解读-DesignPattern:Android源码设计模式解析与实战读书笔记源代码

    Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示的是观察者模式...

    ARM体系与结构读书笔记

    这篇读书笔记详细记录了对这本经典书籍的理解和解析,旨在帮助读者深入理解ARM技术。 1. **ARM处理器架构**:ARM(Advanced RISC Machines)是一种精简指令集计算机(RISC)架构,以其高效能和低功耗闻名。ARM...

    《物联网移动App设计及开发实战》读书笔记模板.pptx

    "《物联网移动App设计及开发实战》读书笔记模板" 《物联网移动App设计及开发实战》读书笔记模板是基于Android平台的物联网移动App设计及开发实战的读书笔记模板。该模板涵盖了物联网移动App设计及开发的各个方面,...

    JAVA面向对象编程(孙卫琴)读书笔记(三)

    - 设计模式是解决常见编程问题的经验总结,如工厂模式、单例模式、观察者模式等,它们是面向对象设计的精髓。 这篇读书笔记通过孙卫琴老师的视角,对上述知识点进行了详细解读和实例演示,有助于读者深入理解Java...

    JM代码阅读笔记共5篇

    【标题】:“JM代码阅读笔记共5篇” 这篇文章集主要关注的是对JM代码的解读,JM是JVT(Joint Video Team)开发的H.264/AVC参考软件,它是学习和理解H.264编码标准的重要资源。H.264,又称为AVC(Advanced Video ...

    C# 设计模式学习 源码

    本资料包“C# 设计模式学习 源码”包含了作者在学习设计模式过程中的笔记和源码示例,对于想要深入理解C#设计模式的人来说是一份宝贵的资源。 设计模式分为三大类:创建型、结构型和行为型。下面将详细介绍这些类别...

    SPI总线协议解析 学习笔记

    四种模式的组合使得SPI能够适应不同类型的硬件设计需求。 在SPI通信中,主设备通常控制时钟信号SCK的频率,因此数据传输速率由主设备决定。主设备通过选择线SS或CS来选择与哪个从设备进行通信,一次只能与一个从...

    深度解析C++对象模型--读书笔记

    这种设计模式提高了代码的可复用性和扩展性。C++支持单继承和多重继承,但多重继承可能会导致菱形问题,即一个子类有多个父类,而这些父类又共同继承自同一个祖先,这时需要处理继承链中的冲突和二义性。 此外,C++...

    基于SSM的云笔记系统设计与实现.doc

    Spring MVC负责处理HTTP请求和响应,实现了Model-View-Controller(MVC)的设计模式;Mybatis则是一个轻量级的持久层框架,它简化了数据库操作,通过XML或注解方式配置和映射原生信息,将接口和Java的POJOs(Plain ...

    STM32读书笔记

    ### STM32启动模式深入解析:BOOT0与BOOT1的奥秘 在探索微控制器的世界里,STM32作为一款广泛应用于嵌入式系统的高性能单片机,其启动配置成为了理解其工作原理的关键一环。本文将围绕STM32的启动机制展开,尤其...

    C++读书笔记 C++编程技巧

    8. **设计模式**:设计模式是解决常见问题的最佳实践,C++中的单例、工厂、观察者等模式是软件设计的常用工具。 9. **性能优化**:笔记可能会讨论如何通过算法优化、减少内存访问、使用const和inline等手段来提高...

    c++读书笔记程序以及源码

    《C++读书笔记程序及源码深度解析》 在编程世界中,C++是一门强大且广泛应用的语言,尤其在系统软件、游戏开发、高性能计算等领域占据着重要地位。本资源包"**c++读书笔记程序以及源码**"提供了一个实践性的学习...

Global site tag (gtag.js) - Google Analytics