![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
重学设计模式
设计模式很重要
LzhSweeterSmile
我是图图小淘气 面对世界好好奇
展开
-
Swift 重学设计模式系列之访问者模式
访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。访问者(Visitor)模式是一种对象行为型模式,其主要优点如下。 1 扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。 2 复用性好。可以通过访问者来定义整个对象结构通用的功能,从...原创 2020-08-28 22:51:59 · 109 阅读 · 0 评论 -
Swift 重学设计模式系列之迭代器模式
迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式,其主要优点如下。 1 访问一个聚合对象的内容而无须暴露它的内部表示。 2 遍历任务交由迭代器完成,这简化了聚合类。 3 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。 4 增加新的聚合类和迭代器类都很方便,无须修改原有代码。 5 封装性良好,为遍历不同的聚合结构提供一个统...原创 2020-08-28 21:54:31 · 183 阅读 · 0 评论 -
Swift 重学设计模式系列之状态模式
状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态模式是一种对象行为型模式,其主要优点如下。 1 状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。 2 减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。 3 有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。...原创 2020-08-28 19:53:53 · 180 阅读 · 0 评论 -
Swift 重学设计模式系列之责任链模式
责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。注意:责任链模式也叫职责链模式。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。责任链模式是一种对象行为型模式,其主要优点如下。 1. 降低了对象之间的耦...原创 2020-08-28 19:15:45 · 199 阅读 · 0 评论 -
Swift 重学设计模式系列之命令模式
命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。命令模式的主要优点如下。 1. 降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。 2. 增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,对扩展比较灵活。 3. 可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配...原创 2020-08-28 00:42:22 · 151 阅读 · 0 评论 -
Swift 重学设计模式系列之策略模式
策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。策略模式的主要优点如下。 1. 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。 2. 策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。...原创 2020-08-27 17:19:02 · 200 阅读 · 0 评论 -
Swift 重学设计模式系列之组合模式
组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。组合模式的主要优点有: 1. 组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码; 2. 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;其主要缺点是: 1. 设计较复杂,...原创 2020-08-27 16:41:02 · 135 阅读 · 0 评论 -
Swift 重学设计模式系列之享元模式
享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。享元模式的主要优点是:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。其主要缺点是: 1. 为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。 2. 读取享元模式的外部状态会使得运行时间稍微变长。enum Bran...原创 2020-08-27 15:36:18 · 116 阅读 · 0 评论 -
Swift 重学设计模式系列之模板方法模式
模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。该模式的主要优点如下。 1. 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。 2. 它在父类中提取了公共的部分代码,便于代码复用。 3. 部分方法是由子类实现的,因此子类可以通过扩展方式...原创 2020-08-18 16:20:42 · 131 阅读 · 0 评论 -
Swift 重学设计模式系列之桥接模式
桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。桥接(Bridge)模式的优点是: • 由于抽象与实现分离,所以扩展能力强; • 其实现细节对客户透明。缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。enum Color { case black case white}class Car {...原创 2020-08-18 15:58:53 · 168 阅读 · 0 评论 -
Swift 重学设计模式系列之适配器模式
适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。该模式的主要优点如下。 • 客户端通过适配器可以透明地调用目标接口。 • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。 • 将目标类和适配者类解耦,解决了目标类和...原创 2020-08-18 15:27:35 · 182 阅读 · 0 评论 -
Swift 重学设计模式系列之代理模式
代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。代理模式的主要优点有: • 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; • 代理对象可以扩展目标对象的功能; • 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;其主要缺点是: • 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变...原创 2020-08-18 15:09:57 · 182 阅读 · 0 评论 -
Swift 重学设计模式系列之建造者模式
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。该模式的主要优点如下: 1. 各个具体的建造者相互独立,有利于系统的扩展。 2. 客户端不必知道产品内部组成的细节,便于控制细节风险。其缺点如下: 1. 产品的组成部分必须相同,这限...原创 2020-08-18 14:21:49 · 241 阅读 · 0 评论 -
Swift 重学设计模式系列之单例模式
单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计成单例。单例模式原创 2020-08-18 13:50:12 · 136 阅读 · 0 评论 -
Swift 重学设计模式系列之原型模式
原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。class Shoe { /// 品牌 var band : String /// 尺码 var size : String i原创 2020-08-18 13:47:56 · 118 阅读 · 0 评论 -
Swift 重学设计模式系列之工厂模式
工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。工厂方法模式的主要优点有:• 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;• 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;enum BandLevel { case expensive case ...原创 2020-08-18 13:40:25 · 207 阅读 · 0 评论 -
Swift 重学设计模式系列之抽象工厂模式
抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。使用抽象工厂模式一般要满足以下条件。 • 系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。 • 系统一次只可能消费其中某一族产品,即同族的产品一起使用。抽象工厂模...原创 2020-08-18 13:31:18 · 150 阅读 · 0 评论