设计模式
Chris馒头
这个作者很懒,什么都没留下…
展开
-
迭代器模式
一、 引言迭代这个名词对于熟悉 Java 的人来说绝对不陌生。我们常常使用JDK 提供的迭代接口进行java collection 的遍历:Iterator it = list.iterator();while(it.hasNext()){//using “it.next();”do some businesss logic}而这就是关于迭代器模式应用很好的例子。二、 定义与结构...原创 2018-12-21 10:40:53 · 121 阅读 · 0 评论 -
单例模式
一、引子单例模式是设计模式中使用很频繁的一种模式,在各种开源框架、应用系统中多有应用。这里我们就单例模式进行系统的学习。并对有人提出的“单例模式是邪恶的”这个观点进行了一定的分析。二、定义与结构单例模式又叫做单态模式或者单件模式。在 GOF 书中给出的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式中的“单例”通常用来代表那些本质上具有唯一性的系统组件(或者叫做资...原创 2018-12-05 10:12:04 · 101 阅读 · 0 评论 -
建造模式
一、引子前几天陪朋友去装机店攒了一台电脑,看着装机工在那里熟练的装配着机器,不禁想起来了建造模式。作为装机工,他们不用管你用的CPU 是Intel 还是AMD,也不管你的显卡是2000 千大元还是白送的,都能三下五除二的装配在一起——一台PC 就诞生了!当然对于客户来说,你也不知道太多关于PC 组装的细节。这和建造模式是多么的相像啊!今天就来探讨一下建造模式二、定义与结构GOF 给...原创 2018-12-05 11:10:39 · 153 阅读 · 0 评论 -
原型模式
一、引子古人云:书非借不能读也。我深谙古人教诲,更何况现在 IT 书籍更新快、价格贵、质量水平更是参差不齐,实在不忍心看到用自己的血汗钱买的书不到半年就要被淘汰,更不想供养使用金山快译、词霸等现代化工具的翻译们。于是我去书店办了张借书卡,这样便没有了后顾之忧了——书不好我可以换嘛!但是,借书也有不爽的地方,就是看到有用或者比较重要的地方,不能在书旁标记下来。一般我会将这页内容复印下来,...原创 2018-12-05 16:18:30 · 103 阅读 · 0 评论 -
适配器模式
一、引子昨天在给新买的 MP3 充电的时候,发现这款MP3 播放器只提供了USB 接口充电的方式,而它所配备的充电器无法直接给USB 接口充电,聪明的厂商为充电器装上了一个USB 接口转换器解决了问题。这个 USB 接口转接器正是我们今天要谈到的适配器。而在软件开发中采用类似于上面方式的编码技巧被称为适配器模式。二、定义和结构《设计模式》一书中是这样给适配器模式定义的:将一个类的接口...原创 2018-12-05 17:14:57 · 110 阅读 · 0 评论 -
桥梁模式
一、引子桥梁(bright)模式是一个功能非常强大而且适用于多种情况的模式。二、定义与结构GOF 在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与实现类的关系,而是组合关系。也就是说,实现部分是被抽象部分调用,以用来完成(实现)抽象部分的功能。在《Thinking in Patte...原创 2018-12-06 10:58:42 · 195 阅读 · 0 评论 -
组合模式
一、引子在大学的数据结构这门课上,树是最重要的章节之一。还记得树是怎么定义的吗?树(Tree)是n(n≥0)个结点的有限集T,T 为空时称为空树,否则它满足如下两个条件:1) 有且仅有一个特定的称为根(Root)的结点;2) 其余的结点可分为 m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(SubTree)。上面给出的递归定义刻画了树的固...原创 2018-12-06 13:56:53 · 216 阅读 · 0 评论 -
装饰模式
一、引子装饰模式?肯定让你想起又黑又火的家庭装修来。其实两者在道理上还是有很多相像的地方。家庭装修无非就是要掩盖住原来实而不华的墙面,抹上一层华而不实的涂料,让生活多一点色彩。而墙还是那堵墙,他的本质一点都没有变,只是多了一层外衣而已。那设计模式中的装饰模式,是什么样子呢?二、定义与结构装饰模式(Decorator)也叫包装器模式(Wrapper)。GOF 在《设计模式》一书中给出的...原创 2018-12-06 16:52:48 · 94 阅读 · 0 评论 -
门面模式
一、引子门面模式是非常简单的设计模式。二、定义与结构门面模式(facade)又称外观模式。GOF在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。定义中提到的子系统是指在设计中为了降低复杂性根据一定的规则(比如业务、功能),对系统进行的划分。子系统中封装有一些类。客户程序在使用子系统的时...原创 2018-12-10 16:38:24 · 160 阅读 · 0 评论 -
享元模式
一、引子让我们先来复习下 java 中String 类型的特性:String 类型的对象一旦被创造就不可改变;当两个String 对象所包含的内容相同的时候,JVM 只创建一个String 对象对应这两个不同的对象引用。让我们来证实下着两个特性吧(如果你已经了解,请跳过直接阅读第二部分)。先来验证下第二个特性:public class TestPattern {public stat...原创 2018-12-12 15:20:06 · 97 阅读 · 0 评论 -
代理模式
一、引子我们去科技市场为自己的机器添加点奢侈的配件,很多DIYer 都喜欢去找代理商,因为在代理商那里拿到的东西不仅质量有保证,而且价格和售后服务上都会好很多。客户通过代理商得到了自己想要的东西,而且还享受到了代理商额外的服务;而生产厂商通过代理商将自己的产品推广出去,而且可以将一些销售服务的任务交给代理商来完成(当然代理商要和厂商来共同分担风险,分配利润),这样自己就可以花更多的心思在...原创 2018-12-12 17:07:19 · 134 阅读 · 0 评论 -
责任链模式
一、 引言初看责任链模式,心里不禁想起了一个以前听过的相声:看牙。说一个病人看牙的时候,医生不小心把拔下的一个牙掉进了病人嗓子里。各个科室的医生推卸责任,搞得病人因此楼上楼下的跑了不少冤枉路,最后无果而终。责任链模式就是这种“推卸”责任的模式,你的问题在我这里能解决我就解决,不行就把你推给另一个对象。至于到底谁解决了这个问题了呢?我管呢!二、 定义与结构从名字上大概也能猜出这个模式的...原创 2018-12-13 13:32:27 · 85 阅读 · 0 评论 -
命令模式
一、引言命令模式是从界面设计中提取出来的一种分离耦合,提高重用的方法。被认为是最优雅而且简单的模式,它的应用范围非常广泛。让我们一起来认识下它吧。先从起源说起。在设计界面时,大家可以注意到这样的一种情况,同样的菜单控件,在不同的应用环境中的功能是完全不同的;而菜单选项的某个功能可能和鼠标右键的某个功能完全一致。按照最差、最原始的设计,这些不同功能的菜单、或者右键弹出菜单是要分开来实现...原创 2018-12-14 09:34:51 · 1309 阅读 · 0 评论 -
解释器模式
一、引子解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。虽然你几乎用不到这个模式,但是看一看还是能受到一定的启发的。二、定义与结构解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子。它属于类的行为模式。这里的语言意思是使用规定格式和语法的代码。在 GOF 的书中指...原创 2018-12-18 15:24:18 · 122 阅读 · 0 评论 -
工厂模式
一、引子话说十年前,有一个暴发户,他家有三辆汽车——Benz 奔驰、Bmw 宝马、Audi 奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz 车后跟司机说“开奔驰车!”,坐上Bmw 后他说“开宝马车!”,坐上Audi 说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有...原创 2018-12-04 17:51:26 · 82 阅读 · 0 评论