
设计模式
复习并总结一下设计模式,基于C++
michael_maomao
enjoy life
展开
-
stl_tree.h 源码剖析
<STL源码剖析>导览关联式容器所谓关联式容器,观念上类似关联式数据库,每组数据都有一个键值(key)和一个实值(value)。当元素被插入到容器中时,容器内部结构(RB-Tree,或者是hash-table)便依照其键值大小,以某种特定规则将这个元素放置于适当位置。一般而言,关联式容器的内部结构是一个balanced binary tree(平衡二叉树),以便获得良好的搜寻效率.平衡二叉树有许多种类,包含AVL-tree,RB-tree,AA-tree.二叉搜索树所谓二叉搜原创 2020-05-13 23:44:25 · 691 阅读 · 0 评论 -
15 设计模式_代理模式(Proxy)
Proxy代理模式动机(Motivation)在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等), 直接访问会给使用者、或者系统结构带来很多麻烦。间接访问,接口隔离。如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。模式定义为其他对象提供一种代理以控制...原创 2020-02-19 18:50:25 · 110 阅读 · 0 评论 -
14 设计模式_门面模式(Façade)
Façade(门面模式)动机(Motivation)客户和组件中各种复杂的子系统有过多的耦合,过多的耦合面临很多变化的挑战。如何简化外部客户程序和系统间的交互接口?如何解耦?将子系统划分为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和依赖关系达到最小。该目标的途径之一就是引入一个外观(Façade)对象,为子系统中较为一般的设施提供了一个单一而简介的界面。...原创 2020-02-17 23:10:07 · 219 阅读 · 0 评论 -
13 设计模式_享元模式(Flywight)
Flywight享元模式动机(Motivation)在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?模式定义运行共享技术有效地支持大量细粒度的对象。举个例子对象池内部状态与外部状态内部状态是由工厂方法...原创 2020-02-17 22:43:08 · 216 阅读 · 0 评论 -
12 设计模式 单例模式(Singleton)
Singleton单例模式动机(Motivation)在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应该是类设计者的责任,而不是使用者的责任模式定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。举个例子其实单例模式重点是对static的...原创 2020-02-17 01:01:09 · 134 阅读 · 0 评论 -
11 设计模式_构建器(Builder)
Builder 构建器动机(Motivation)在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变模式定义将...原创 2020-02-16 23:35:23 · 158 阅读 · 0 评论 -
9 设计模式_抽象工厂(Abstract Factory)
Abstract Factory 抽象工厂动机(motivation)在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。模式定义提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象...原创 2020-02-16 22:44:39 · 167 阅读 · 0 评论 -
8 设计模式_工厂模式(Factory Method)
Factory Method工厂方法“ 对象创建” 模式通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式Factory MethodAbstract FactoryPrototypeBuilder动机(Motivation)在软件系统中,经常面临着创建对象的工作...原创 2020-02-16 21:06:17 · 144 阅读 · 0 评论 -
7 设计模式_桥接模式(Bridge)
Bridge 桥模式动机(Motivation)由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。装饰模式的扩展。如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度模式定义*将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化举个例子*使用模式前class...原创 2020-02-16 20:38:30 · 144 阅读 · 0 评论 -
6 设计模式_装饰模式(Decorator)
Decorator 装饰模式“单一职责”模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任典型模式DecoratorBridge动机 (Motivation)在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随...原创 2020-02-16 20:02:20 · 142 阅读 · 0 评论 -
5 设计模式_观察者模式(Observer)
Observer 观察者模式动机(Motivation)在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合模式定义定义对象间的一种一对多(...原创 2020-02-16 18:58:13 · 289 阅读 · 0 评论 -
4 设计模式_策略模式(Strategy)
Strategy 策略模式动机(Motivation)在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担.变化的部分,算法如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?定义定义一系列算法,把它们一个个封装起来,并且使它们可互相替...原创 2020-02-16 16:45:05 · 219 阅读 · 0 评论 -
3 设计模式_模板方法(Template Method)
GOF-23 模式分类原创 2020-02-16 15:31:12 · 189 阅读 · 0 评论 -
2 设计模式_面向对象设计原则
面向对象设计,为什么?变化是复用的天敌,面向对象设计最大的优势在于:抵御变化!重新认识面向对象理解隔离变化从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小。...原创 2020-02-16 11:58:56 · 123 阅读 · 0 评论 -
1 设计模式_介绍
学习目标理解松耦合设计思想掌握面向对象设计原则掌握重构技法改善设计掌握GOF核心设计模式原创 2020-02-16 11:19:16 · 161 阅读 · 0 评论