
软件体系结构与设计模式
软件体系结构与设计模式个人课堂笔记,完整排版资料可在公众号【THU小鱼干杂货铺】免费获取
唐唐无糖
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
软件体系结构与设计模式——课程总体介绍(01-03)
这门课是考试课+实验课,开卷考试题量大有点难,实验认真做,实验源代码见:https://download.youkuaiyun.com/download/qq_41997479/10911963仅供参考,以下是个人的课堂笔记,只有设计模式部分,这门课的sk老师非常负责,在学生中口碑很好,如果认真听课,课后及时总结,最后会更易读懂代码的架构以及为何这样设计的原因,对编程也有很大的帮助。 ...原创 2019-01-23 23:04:01 · 6726 阅读 · 2 评论 -
16 State状态模式(行为型)
16 State(行为型) 状态图是计算机科学和相关领域中用来描述系统行为的一种图。 动机: 状态模式允许一个对象在其内部状态改变的时候 改变其行为。这个对象看上去就像改变了它的类一样 什么时候用: 一个对象的行为取决于它的状态,并且它必须在运行时根据那个状态改变它的行为。操作有很大的、由多个部分组成的条件语句,这些语句依赖于对象的状态。...原创 2019-01-25 19:53:38 · 458 阅读 · 0 评论 -
17 Proxy代理模式(结构型)
17 Proxy(代理,结构型) 动机: 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。 只在必要时生成实例 控制对对象的访问的一个原因是defer(推迟)创建和初始化的全部成本,直到我们需要使用它。 解决方案是使用另一个对象,代理,作为真实对象的替身。 也称为:Surrogate JAVA RMI是JAVA RPC的版本,RPC...原创 2019-01-25 19:55:09 · 388 阅读 · 0 评论 -
18 Flyweight享元(结构型)
18 Flyweight享元(结构型) 享元: 享元指:次最轻量级的拳击选手 享元模式以共享的方式高效地支持大量的细粒度对象 通过尽量共享实例来避免new出实例。(new不仅消耗内存,还会花费时间) 动机: 一些应用程序可以从在整个设计过程中使用对象中获益,但是一个简单的实现将会非常昂贵。 面向对象的文档编辑器通常使用对象来表示嵌入的元素,如表和图...原创 2019-01-26 11:07:21 · 203 阅读 · 0 评论 -
19 Builder创建者(创建型)
19 Builder创建者(创建型) 动机: RTF(富文本格式)文档交换格式的阅读器应该能够将RTF转换为许多文本格式。但是,可能的转换数量是开放的。因此,在不修改阅读器的情况下添加新的转换应该很容易。 建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的 ...原创 2019-01-26 11:10:59 · 210 阅读 · 0 评论 -
20 chain of responsibility职责链模式(行为型)
20 chain of responsibility(行为型) 对于一个请求,能自己做就自己做,做不了就推卸给下一个人;下 一个人能自己做就自己做,不能做再推卸给下一个人。 直接决定由哪个对象负责处理时,就需要推卸责任。我们可以将多 个对象组成一个职责链,然后按照它们在职责链上的顺序一个一个地找出谁来负责处理。 缺点:延迟 优点:将请求的发送方与其接收方解耦。 ...原创 2019-01-26 11:14:12 · 178 阅读 · 0 评论 -
21 Mediator中介者模式(行为型)
21 Mediator(行为型) 中介者/调停者对象封装了一系列对象相互作用的方式,使得这些对象不必互相明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。) 动机: 面向对象设计鼓励在对象之间分布行为。这种分布可以产生对象结构,对象之间有许多连接;在最坏的情况...原创 2019-01-26 11:15:12 · 180 阅读 · 1 评论 -
22 Bridge桥接(结构型)
22 Bridge(桥接,结构型) 需要将“类的功能层次结构”和“类的实现层次结构”分离为两个独立的类层次结构。然后在它们之间搭建一座bridge。 动机: 桥接模式的用意是将抽象与实现解耦,使得二者可以独立地变化 抽象(Abstraction)不等于接口(Interface),存在于多个实体中的共同的概念性联系,就是抽象。接口是一种抽象的方式。 所谓强...原创 2019-01-26 11:16:20 · 196 阅读 · 0 评论 -
23 prototype原型(创建型)
23 prototype(创建型) 动机: 指定使用原型实例创建的对象类型,并通过复制该原型创建新对象。 创建一个类来表示所有对象,不行,每个对象一个类,也不行 结构: 合作: A client asks a prototype to clone itself. 后果: 优点: 工厂和建造商所造成的同样后果; 运行时产品的添...原创 2019-01-26 11:18:20 · 169 阅读 · 0 评论 -
24 Memento日志模式(行为型)
24 Memento(行为型) 动机:(游戏存档) 在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。 有时需要记录对象的内部状态。 当实现检查点和撤销机制时,这是必需的,这些机制允许用户退出临时操作或从错误中恢复。您必须将状态信息保存在某个地方,以便可以将对象恢复到以前的状态。例如,撤销、重做、历史记录...原创 2019-01-26 11:19:26 · 149 阅读 · 0 评论 -
25 Visitor访问者模式(行为型)
25 Visitor(行为型) 认为被访问的东西收留我了 动机: 表示要对对象结构的元素执行的操作。 Visitor允许您定义一个新操作,而无需更改它所操作的元素的类。 什么时候用: 对象结构包含许多具有不同接口的对象类,您希望对这些依赖于其具体类的对象执行操作。 需要对对象结构中的对象执行许多不同的和不相关的操作,您希望避免使用这些操作“污染”它们的...原创 2019-01-26 11:21:55 · 171 阅读 · 0 评论 -
15 Composite组合模式(结构型)
15 Composite(结构型) 类似于数据结构中的List (列表). 动机: 图形应用程序(如绘图编辑器和示意图捕获系统)允许用户用简单的组件构建复杂的图表。 用户可以将组件分组以形成更大的组件,然后再将这些组件分组以形成更大的组件。 Component:定义接口,接口分离原则 是单一职责原则在接口上的一种表示 compo...原创 2019-01-25 19:52:23 · 229 阅读 · 0 评论 -
14 Iterator迭代器(行为模式)
14 Iterator(行为模式) 提供按顺序访问聚合对象的元素的方法,而不公开其底层表示形式。 也称为cursor 动机 聚合对象(如列表)应该提供一种访问其元素而不公开其内部结构的方法。 迭代器模式的关键思想是负责访问和遍历列表对象,并将其放入迭代器对象中。 将遍历机制与List对象允许我们为不同的遍历策略定义迭代器,而无需在List接口中枚举它们。...原创 2019-01-25 19:50:55 · 221 阅读 · 0 评论 -
04 observer观察者模式(行为型)
04 observer(行为型) 观察者模式:(也叫家属Dependents、观察-订阅者Publish-Subscribe、视图Model-View) 定义对象间的一对多依赖,当一个对象状态改变时,其他对象会被通知到并自动更新自身状态。 需要在不使类紧密耦合的情况下保持相关对象之间的一致性。 主题知道他的观察者,当主题本身发生改变,他需要通知观察自己的观察者,自己改变了 ...原创 2019-01-23 23:05:15 · 222 阅读 · 0 评论 -
05 Strategy策略模式(行为型)
05 Strategy(行为型) 把可能变化的代码独立出来,不要和不变化的代码混在一起 将变化的封装起来 针对接口编程,而不是针对实现编程 多用组合,少用继承,好处在于灵活性,运行时变化 策略模式:也叫policy 针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。客户决定使用哪...原创 2019-01-23 23:06:30 · 156 阅读 · 0 评论 -
06 Factory Method工厂方法(创建型)
06 Factory Method(创建型) 当您使用new时,您肯定是在实例化一个具体的类,所以这肯定是一个实现,而不是接口。 在05策略上,我们学习了一个设计原则: 区分哪些变化与哪些保持不变。把变化的东西“封装”起来。 满足的原则: 变化封装原则 开放封闭原则 依赖倒置原则 要依赖抽象,不要依赖具体类。用依赖倒置原则设计的...原创 2019-01-23 23:08:14 · 189 阅读 · 0 评论 -
07 Abstract Factory抽象工厂模式(创建型)
07 Abstract Factory(创建型) 动机 提供一个接口,用于创建相关或依赖对象的系列,而无需指定它们的具体类。 也叫kit 客户指向抽象工厂,但只能拿到一个具体工厂类型 满足的原则:开放封闭原则 什么时候使用: 系统应该独立于其产品的创建、组合和表示方式。 一个系统应该配置多个产品系列(族)之一。 一系列相关的产品对象被设计成可以...原创 2019-01-23 23:16:58 · 204 阅读 · 0 评论 -
08 Decorator装饰器模式(结构型)
摩卡里有has a深度烘焙咖啡 满足的原则:开放封闭 装饰器模式: 当你想赋予一个对象一些动态职责时,用decorator 装饰器为扩展功能提供了一个灵活的子类替代方法。 动态扩展; 比继承好; 什么时候用: 在不影响其他对象的情况下,动态地向单个对象添加职责。 当子类化扩展不现实时。(不能向子类添加新方...原创 2019-01-23 23:18:55 · 210 阅读 · 0 评论 -
09 singleton单例模式(创建型)
09 singleton(创建型) 为什么我们需要独一无二的对象? 线程池 打印机 Caches 注册表 比如太阳、月亮 单例模式:一个类只能被实例化一次 什么时候用: 一个类必须只有一个实例,并且它必须能够从一个众所周知的接入点对客户端进行访问。 当唯一的实例应该通过子类化来扩展时,客户端应该能够在不修改其代码的情况下使用扩展实例。 ...原创 2019-01-24 10:38:03 · 246 阅读 · 1 评论 -
10 Command命令模式(行为型)
10 Command(行为型) 命令也是类 命令模式把一个请求封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 As known as :Action 、Transaction 有时,有必要向对象发出请求,而不知道请求的操作或请求的接收者。 什么时候用: 来取代回调函数:把函数指针地址作...原创 2019-01-24 10:39:48 · 249 阅读 · 0 评论 -
11 adapter适配器模式(结构型)
11 adapter(结构型) 适配器 满足的原则: 依赖倒置原则——针对接口编程 火鸡当成鸭子用,把火鸡装饰成鸭子 依然是一个包装类 什么时候用: 您希望使用现有的类,其接口与您需要的接口不匹配。 您想要创建一个可重用的类,它与不相关的或不可预见的类合作,也就是说,这些类不一定具有兼容的接口。 (仅...原创 2019-01-24 10:41:40 · 142 阅读 · 0 评论 -
12 façade外观模式(结构/架构)
12 façade(结构/架构) 动机: 将系统构造为子系统有助于降低复杂性。 一个常见的设计目标是最小化子系统之间的通信和依赖关系。 实现这一目标的一种方法是引入一个facade对象,该对象为子系统提供一个单一的、简化的接口。 什么时候用: 您希望为复杂的子系统提供一个简单的接口。 客户端和抽象的实现类之间有许多依赖关系。 引入faca...原创 2019-01-25 19:47:31 · 289 阅读 · 0 评论 -
13 Template_method模板方法(行为型)
13 Template_method(行为型) 模板方法 准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。 框架已经实现了大部分,让子类去实现特定需求的东西 什么时候用 部分算法已经实现,变化的算法留给子类 为了避免代码复制,将子类...原创 2019-01-25 19:49:40 · 179 阅读 · 0 评论 -
26 Interpreter解释器模式(行为型)
26 Interpreter(行为型) 动机: 给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。 什么时候用: 当需要解释一种语言时,可以使用解释器模式,并且可以将该语言中的语句表示为抽象语法树。 当语法简单时,解释器模式最有效。语法结构不能太复杂 效率不是一个关键问题。最有效的...原创 2019-01-26 11:23:38 · 205 阅读 · 0 评论