
设计模式
塞尔维亚大叔
毕业于上海复旦大学,专注技术多年,产品控、代码控,拥有丰富的项目经验,参与主持研发了多个成功上线的大型互联网项目。
展开
-
代理模式 (Proxy Pattren)应用场景
介绍代理模式 (Proxy Pattren) 也称为委托模式,是属于结构型设计模式,其重要性不言而喻,相信在看过本篇文章之后会发现不少设计模式中都有代理模式的影子。那么何为代理模式?其实代理在我们日常生活中并不少见,对于程序员来说最常接触的莫过于代理上网了,连上代理服务器地址,就可以轻松畅游全世界的网络;总而言之,也许你并不留意,但是代理是无处不在,现实生活如此,我们的 Code 世界里也是如此!既然这样,我们来探究下代理模式倒是有多普遍。下面首先看下代理模式的定义吧。定义为其它对象提供一种代理原创 2020-05-18 20:51:52 · 758 阅读 · 0 评论 -
简单的分析下组合模式
介绍组合模式(Composite Pattern)也称为部分整体模式 (Part Whole Pattern) ,属于结构性设计模式,组合模式比较简单,它将一组相似的对象看做一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。定义将对象组合成树形结构以表示 ”部分-整体“ 的层次结构,使得用户对整个对象和组合对象的使用具有一致性。使用场景表示对象的 ”部分-整体“ 层次结构时。 从一个整体中能够独立出部分模块或功能的场原创 2020-05-15 19:38:07 · 246 阅读 · 0 评论 -
简单总结下外观、桥接模式
外观模式介绍外观模式 (Facade) 在开发过程中的运用评率非常高,尤其是在现阶段,各种第三方 SDK “充斥” 在我们周边,而这些 SDK 大多会使用外观模式。通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节。当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如,网路模块、图片模块,可能你已经在开发中运用无数次外观模式,只是没有在理论中认识它,下面我们就来学习它。定义要求一个子系统的外部与其内部的通信必须通原创 2020-05-15 19:37:29 · 232 阅读 · 0 评论 -
对Builder 模式的简单分析
介绍Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程,该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和创建过程隔离开来。定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景相同的方法,不同的执行顺序,产生不同的事件结果时。 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时。简单代码示例这里比如我们第一次初始化应用的时候,需要初始化一些事物,原创 2020-05-15 16:23:52 · 226 阅读 · 0 评论 -
对状态模式的简单分析
介绍状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。状态模式和策略模式的结构几乎完全一样,但它们的目的、本质却完全不一样。状态模式的行为是平行的、不可替换的,策略模式的行为是彼此独立、可相互替换的。用一句话来表述,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同抽象状态的基类。状态模式的意图是让一个对象在其内部改变的时候,其行为也随之改变。定义当一个对象的内在状态改变时允许改变其行为,这个对象看起来看是改变了其类。使用场景一个对象的行为取决于它的状态,并原创 2020-05-15 15:58:43 · 161 阅读 · 0 评论 -
简单分下Builder 模式
介绍Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程,该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和创建过程隔离开来。定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景相同的方法,不同的执行顺序,产生不同的事件结果时。 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时。简单代码示例这里比如我们第一次初始化应用的时候,需要初始化一些事物,原创 2020-05-15 14:59:03 · 189 阅读 · 0 评论 -
简单分析和举例代理模式
介绍代理模式 (Proxy Pattren) 也称为委托模式,是属于结构型设计模式,其重要性不言而喻,相信在看过本篇文章之后会发现不少设计模式中都有代理模式的影子。那么何为代理模式?其实代理在我们日常生活中并不少见,对于程序员来说最常接触的莫过于代理上网了,连上代理服务器地址,就可以轻松畅游全世界的网络;总而言之,也许你并不留意,但是代理是无处不在,现实生活如此,我们的 Code 世界里也是如此!既然这样,我们来探究下代理模式倒是有多普遍。下面首先看下代理模式的定义吧。定义为其它对象提供一...原创 2020-05-14 16:51:06 · 315 阅读 · 0 评论 -
访问者模式的最新详解
介绍访问者模式是一种将数据操作与数据结构分离的设计模式,它是 《设计模式》中较为复杂的一个,但它的使用频率并不高,正如《设计模式》的作者 GOF 对访问者模式的描述:大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是真正的需要它了。访问者模式的基本思想是,软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个 accept 方法用来接受访问者对象的访问。访问者是一个接口,它拥有一个 visit 方法,这个方法对访问到的对象结构中不...原创 2020-05-13 15:52:39 · 530 阅读 · 0 评论 -
迭代器模式 (Iterator Pattern),那些你不知道的小秘密
介绍迭代器模式 (Iterator Pattern) 又称为游标 (Cursor) 模式 ,是行为型设计模式之一。迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如 Java 的 List 、Map 、数组等,我们知道对容器对象的访问必然会设计遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法。如果我们将遍历的方法封装到容器中,那么对于容器类来说就承担了过多的功能,容器类不仅仅要维护自身内部的数据元素而且还要对外提供遍历的接口方法,因为遍历状态的存储问题还不能对同一个容器同时..原创 2020-05-12 17:10:00 · 216 阅读 · 0 评论 -
设计模式之备忘录模式
介绍备忘录模式属于行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时口头禅 ”有没有后悔药“ 。备忘录模式实现的方式需要保证被保存的对象状态不能被对象外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。定义在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态。使用场景需要保存一个对象在某一个时刻的状态或部分状态。 如果用一个接口来让其他对象得到这些状态,将会..原创 2020-05-12 16:36:27 · 193 阅读 · 0 评论 -
设计模式之观察者模式
介绍观察者模式是一个使用率非常高的模式,它最常用的地方是 GUI 系统、订阅-发布,因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得她们之间的依赖性更小,甚至做到毫无依赖。以 GUI 系统来说,应用的 UI 具有易变性,尤其是前期随着业务的改变或者产品的需求更改,应用界面也会经常性变化,但是业务逻辑基本变化不大,此时, GUI 系统需要一套机制来应对这种情况,使得 UI 层与具体的业务逻辑解耦,观察者模式此时就派上用场了。定义定义对象间一种 1 对 N 的关系,使得每当...原创 2020-05-12 16:16:51 · 168 阅读 · 0 评论 -
设计模式之策略模式
介绍在软件开发中常常遇见这样的问题:实现某个功能可以有多种算法或者策略,我们根据实际情况选择不同的算法或者策略来完成该功能。例如,排序算法,可以有多种的实现方式。那么,针对这种情况,应该怎么处理?是将这些算法写在一个类中,每一个方法对应一个具体的排序算法;还是将这些排序算法封装在同一个方法中,通过 if...else 或者 case 等条件判断语句来选择具体的算法。这 2 种实现方法我们都可以称之为硬编码。当然,这样是可以实现需求,但是,当很多算法在一个类时,这个类就会变得很臃肿,维护成本就会变高,原创 2020-05-11 15:11:15 · 150 阅读 · 0 评论 -
设计模式之状态模式
介绍状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。状态模式和策略模式的结构几乎完全一样,但它们的目的、本质却完全不一样。状态模式的行为是平行的、不可替换的,策略模式的行为是彼此独立、可相互替换的。用一句话来表述,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同抽象状态的基类。状态模式的意图是让一个对象在其内部改变的时候,其行为也随之改变。定义当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。使用场景1.一个对象的行为取决于它的..原创 2020-05-11 14:20:09 · 153 阅读 · 0 评论 -
设计模式之单例模式
单例模式介绍单例模式是应用最为广泛的模式之一,也可能是很多入门或初级工程师唯一会使用的设计模式之吧,在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个实例类。有利于我们的调用,避免一个相同的类重复创建实例,比如一个网络请求,图片请求/下载,数据库操作等,如果频繁创建同一个相同对象的话,很消耗资源,因此,没有理由让它们构造多个实例。全局都需要使用这个功...原创 2020-05-08 17:29:46 · 212 阅读 · 0 评论