![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 60
Forevers21
分享与学习;
展开
-
设计模式笔记20:组合模式
Composite动机客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象结构)的变化 引起客户代码的频繁变化,带来了代码的维护性、扩展性等弊端。如何将”客户代码与复杂的对象容器结构“解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?模式定义将对象组合成树形结构以表示”部分-整体“的层次结构。Compos...原创 2019-12-06 16:35:15 · 108 阅读 · 0 评论 -
设计模式笔记15:代理模式
Proxy动机在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等), 直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的同事来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。模式定义为其他对象提供一种代理以控制(隔离,使用接口)对这对象的访问。 ——《设计模式》GoF(...原创 2019-12-06 14:06:53 · 100 阅读 · 0 评论 -
设计模式笔记14:门面模式
Façade“接口隔离”模式在主件构建过程中,某些接口之间的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。典型模式:FaçadeProxyAdapterMediator动机客户和组件中各种复杂的子系统有过多的耦合(如下图所示)如何简化外部客户程序和系统间的交互接口?如何解耦?模式定义...原创 2019-12-04 23:01:00 · 128 阅读 · 0 评论 -
设计模式笔记13:享元模式
Flyweight动机采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?模式定义运行共享技术有效地支持大量细粒度的对象。 ——《设计模式》GoF要点总结面向对象很好地解决了抽象性的问题,但是作为yield运行机器中...原创 2019-12-04 22:27:11 · 112 阅读 · 0 评论 -
设计模式笔记12:单例模式
Singleton"对象性能"模式面向对象很好地解决了“抽象”的问题,但是必不可免地要付出一定的代价,对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。典型模式:SIngletonFlyweight动机经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,...原创 2019-12-04 20:21:07 · 109 阅读 · 0 评论 -
设计模式笔记11:构建器
Builder动机有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这 个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?模式定义将一个复杂对象的构建与其表示相分离,使得...原创 2019-12-04 18:20:18 · 142 阅读 · 0 评论 -
设计模式笔记10:原型模式
Prototype动机经常面临这“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得依赖这些”易变对象“的客户程序不随着需求改变而改变。模式定义使用原型实例指定创建对象的种类,然后通过拷贝(深拷贝)这些原型来创建新的对象。 ——《...原创 2019-12-04 17:25:43 · 95 阅读 · 0 评论 -
设计模式笔记9:抽象工厂
Abstract Factory动机经常面临着“一系列相互依赖的对象工作”;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。模式定义提供一个接口,让该接口负责创建一系列”相关或者相互依赖的对象“,无需指定它们具体的类。 ——《设计模式》GoF...原创 2019-12-04 16:53:25 · 110 阅读 · 0 评论 -
设计模式笔记8:工厂模式
Factory Method“对象创建”模式通过“对象创建”模式绕开new,来避免对象创建(new)过程中导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式:Factory MethodAbstract FactoryPrototypeBuilder动机在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类...原创 2019-12-03 22:51:13 · 123 阅读 · 0 评论 -
设计模式笔记7:桥模式
动机原创 2019-12-03 18:15:13 · 184 阅读 · 0 评论 -
设计模式笔记6:装饰模式
Decorator“单一职责”模式:如果责任划分不清晰, 使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划分责任典型模式:DecoratorBridge动机在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功...原创 2019-12-03 18:11:56 · 168 阅读 · 0 评论 -
设计模式笔记5:观察者模式
Observer“组件协助”模式:通过晚绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常有的模式(包括前面所学的两个,Template Method、Strategy、Observer)动机在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——“ 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不...原创 2019-12-03 00:06:38 · 89 阅读 · 0 评论 -
设计模式笔记3:模板方法
Template Method动机(Motivation):在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求。如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?模式定义定义一个操作中的算法的骨架 (稳定) ,而将一些步骤延迟 (变化) 到子类中。 Template Method使得子类可以不改变(复用)一个算法...原创 2019-12-01 20:01:32 · 103 阅读 · 1 评论 -
设计模式笔记4:策略模式
Strategy动机(Motivation)在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时(Runtime)根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?模式定义定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模...原创 2019-12-02 17:15:29 · 150 阅读 · 0 评论 -
设计模式笔记2:面向对象设计原则
1. 依赖倒置原则(DIP)高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) 。抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽象(稳定)。目的:隔离变化...原创 2019-11-30 22:15:54 · 117 阅读 · 0 评论 -
设计模式笔记1:设计模式简介
李建钟老师的视频链接23个设计模式什么是设计模式1.可复用2.面向对象如何解决复杂性?分解人们面对复杂性有一个常见的做法:即分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单问题。(不容易复用,C语言常用的方法之一)例子:绘制形状每个形状(线、矩形、圆形等)写一个处理类,绘制函数里根据用户设置的形状各自调用对应形状的处理函数。抽象更高层次来讲,人们处理复杂...原创 2019-11-30 21:52:41 · 103 阅读 · 0 评论