![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 91
huangjh2018
这个作者很懒,什么都没留下…
展开
-
设计模式——职责链模式
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理这个请求,这样系统更改可以在不影响客户端的情况下动态地重新组织和分配责任。原创 2017-11-25 10:46:49 · 315 阅读 · 0 评论 -
设计模式——代理模式
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。是属于结构型模式。 代理根据其种类,在适当的时候向RealSubject转发请求。 Proxy模式在访问对象时引入了一定程度的间接性。根据代理的类型,附加的间接性有很多种用途:远程代理(Remote Proxy)可以隐藏一个对象存在于不同地址空间的事实。虚代理(Virtual Proxy)可以进行最优化,例如根据要求创建对象。保护代理(Protection Proxies)和智能引用(Smart Reference)都允许在访原创 2017-11-22 15:49:11 · 270 阅读 · 0 评论 -
设计模式——装饰模式
有时我们希望给某个对象而不是整个类添加一些功能。例如,一个图形用户界面工具箱允许你对任意一个用户界面添加一些特性,例如边框,或是一些行为,例如窗口滚动。 使用继承机制是添加功能的一种有效途径,从其他类继承过来的边框特性可以被多个子类的实例所使用。但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。 一种较为灵活的方式是将组件嵌入另一个对象中,由这个对象添加边框。我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。它将客户请求转发给原创 2017-11-13 20:38:20 · 252 阅读 · 0 评论 -
设计模式——外观模式
1. 概述将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖到达最小。达到该目的地途径之一就是引入一个外观(Facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2. 结构图下面是外观模式原创 2017-11-16 21:07:09 · 231 阅读 · 0 评论 -
设计模式——享元模式
享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。 flyweight是一个共享对象,它可以同时在多个场景中使用,并且在每个场景中flyweight都可以作为一个独立的对象——这一点与非共享对象的实例化没有区别。flyweight不能对它所运行的场景做出任何假设,这里的关键概念是内部状态和外部状态之间的区别。内部状态存储于flyweight中,它包含了独立于flyweight场景的信息,这些信息使得flyweight可以被共享。而外部状态取决于Flyweight场景,并根据场景二变原创 2017-11-21 09:51:23 · 256 阅读 · 0 评论 -
设计模式——简单的工厂模式
简单工厂模式又称静态工厂方法模式,属于创建型模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单的工厂模式是工厂模式中最简单实用的模式,但是它不属于23中GOF设计模式。简单的工厂模式其实就是工厂方法模式的以种特例,两者归为一类。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单的工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。我们先来看看它的组成:工厂角色:这是本模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直原创 2017-10-10 21:10:59 · 250 阅读 · 0 评论 -
设计模式——生成器(建造者)模式
建造者(Builder)模式又称生成器模式,属于创建型模式。在软件的设计中,我们可能经常会遇到需要构建某个复杂的对象(比如在游戏开发中,进行人物角色的构建),建造该对象的“过程”是稳定的(对于一个人设来都有身体,脸,发型,手脚等),而具体建造的“细节”是不同的(每个人设的身体,脸等各有千秋)。但对于用户来讲,我才不管这些,我只想告诉你,我现在需要某个对象(拥有某特征的人物角色),于是你就创建一个给我就行了。 如果你需要将一个复杂对象的 构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我原创 2017-11-05 11:04:01 · 2124 阅读 · 0 评论 -
设计模式——单例模式
1. 简介单例模式(Singleton)也是属于对象创建型模式的一种。通常我们可以让一个全局变量使得对象被访问,但它不能防止你实例化多的对象。一个最好的办法就是,让类自身负责保持它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它提供一个访问该实例的方法。单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。2. 结构图Sing原创 2017-11-05 10:59:45 · 423 阅读 · 0 评论 -
设计模式——原型模式
原型模式(Prototype)属于对象创建型模式。其特点在于通过复制一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的原型。它提供了一种快速有效的创建对象的方式。当直接创建对象的代价比较大时可以采用这种方式。例如:一个对象需要在一个高代价的数据库操作之后被创建。当我们需要再次创建一个该对象的时候,就可以直接通过之前创建的原型通过复制来返回一个新实例,并在需要的时候更新数据库,以此来减少数据库调用。 原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原原创 2017-10-30 22:11:16 · 382 阅读 · 0 评论 -
设计模式——抽象工厂模式
1. 简介抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。原创 2017-11-05 10:53:28 · 466 阅读 · 0 评论 -
设计模式——组合模式
组合模式(Composite),将对象组合成树形结构以表示“部分——整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。有时候我们又称其为部分——整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素。从而使得客户与复杂元素的内部结构解耦。 在一些递归或分级数据结构中,组合模式非常有用武之地。例如,文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件,也可以是目录。按照这种方式,计算机的文件系统就是以递归结构来原创 2017-11-12 17:32:53 · 277 阅读 · 0 评论 -
设计模式——桥接模式
1. 简介当一个抽象可能有多个实现时,通常用继承协调它们。抽象类定义对该抽象的接口,而具体的子类则用不同方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立的进行修改、扩充和重用。这种依赖关系限制了灵活并最终限制了复用性。 在面向对象设计中,我们有一个很重要的原则,那就是合成/聚合复用原则。即优先使用对象合成/聚合,而不是类继承。这也就引出这次要提到的桥接模式。 桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地原创 2017-11-11 14:51:40 · 507 阅读 · 0 评论 -
设计模式——适配器模式
适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。是属于类对象结构型模式的一种。 适配器模式(Adapter)主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。简单地说,就是需要的东西就在面前,但却不能使用,于是我们就想办法适配它。 这样说起来可能有些抽象,就以生活中的例子来形象的表述下。大部分使用过安卓手机的朋友对于来说,在很长的一段时间内都是使用micro USB类型的充电口的原创 2017-11-07 20:55:19 · 493 阅读 · 0 评论 -
设计模式——命令模式
有时候必须向某对象提交请求,但并不知道关于被请求的操作或请求的接受者的任何信息。例如,用户界面工具箱包括按钮和菜单这样的对象,它们执行请求响应用户输入。但工具箱不能显示在按钮或菜单中实现该请求,因为只有使用工具箱的应用知道该由哪个对象做哪个操作。而工具箱的设计者无法知道请求的接受者或执行的的操作。 命令模式(Command),将一个请求封装称为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 就我们的例子来说命令模式通过将请求本身变成一个对象来使工具原创 2017-11-26 12:51:30 · 276 阅读 · 0 评论