
设计模式
文章平均质量分 77
wjwisme
知其然,知其所以然
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式前奏之什么是设计模式?
设计模式一词来源于建筑行业,简单说就是解决建筑行业不同问题的一些模板。按照这些模板设计的建筑更有规划,更受到人们的喜爱。由"F4"(Gang of four,GoF)引申到软件行业,归纳总结了23种使用频率大,或者最利于软件工程师解决编程过程中经常遇到的那些难题的编程模式就是软件设计中的设计模式了。狭义设计模式共23种(这23种最常用,最通用),以这23种模式或者说解决方案解决我们编程中经原创 2017-07-10 20:34:20 · 353 阅读 · 0 评论 -
设计模式(18)--备忘录模式
备忘录模式的出现的目的很容易理解,记录对象的状态,在对象发生改变后,如果”后悔“,可以恢复。备忘录模式为对象提供了一种后悔药,在备忘录模式中,引入了备忘录角色,他就是那颗后悔药,因为备忘录角色记录了对象的曾经的状态。为了能记录对象的状态,备忘录类需要和被备忘的原始类的全部或部分属性相同,这取决于需要备忘的信息。同时,为了保持备忘录角色的”纯洁性“,要确保对备忘录属性的访问权限仅仅在原始类一个手原创 2017-08-01 21:50:21 · 286 阅读 · 0 评论 -
设计模式(8)--组合模式
数据结构中有一种结构是树,树包含根节点、子节点、叶子结点,而组合模式就是专门用来处理类似树结构的设计模式,组成这棵树的节点和叶子是一个个对象,而组合模式却可以以统一对待叶子和树。要想统一对待,在面向对象中很难不想到抽象二字,只有站的高,面向高层处理,才有底气屏蔽底层细节,增加扩展性。举个栗子: 平常我们用的windows文件夹就是树结构的,文件夹里可以包含文件夹,文件夹里可以包含文原创 2017-07-24 21:39:07 · 455 阅读 · 0 评论 -
设计模式(19)--观察者模式
观察者模式原理很好理解,就是定义一个观察者,一个目标,当目标状态发生改变时,通知观察者,观察者做出相应动作。目标与观察者是一对多的依赖关系。举个例子:我们开车,遇到红绿灯,这时候司机就是观察者,目标就是红绿灯,可以有多个司机瞅着一个红绿灯(多对一),比如当前红灯,司机们盯着红绿灯,红绿灯由红灯变绿灯,司机们眼睛瞅到红绿灯变化(得到通知),启动汽车,通过该路口。观察者模式UML类原创 2017-08-02 21:27:16 · 280 阅读 · 0 评论 -
设计模式(9)--装饰模式
装饰模式,从名字谈起比较容易理解,举个例子,西方人过圣诞节了,买了颗圣诞树回家装饰装饰,怎么装饰呢,不能说我把圣诞树削成光杆司令当成金箍棒耍吧,一般都是在上面挂点小饰品、小礼品让它变得更加美观更具有观赏性,而它圣诞树的本质不变。而我们的装饰模式就是这样,一个类基本功能不变,我们想给他加点功能润色一下这个类,可以使用装饰模式。原来类的核心功能是不变的,装饰模式所做的仅仅是装饰。一般我们给类扩原创 2017-07-25 21:38:08 · 297 阅读 · 0 评论 -
设计模式(20)--状态模式
状态模式,事物都是不断在演变,面向对象是对现实世界的抽象,所以对象某些时候也会发生状态改变,为了容易处理这些状态发生改变的的这些对象,诞生了状态模式。状态模式即系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不同时可以使用状态模式。状态模式将发生改变的状态抽象出来形成一个状态类,便于进行处理。状态模式UML类图:示例代码:环境类:/**原创 2017-08-03 21:25:20 · 250 阅读 · 0 评论 -
设计模式(11)--享元模式
享元模式,还是从名字引出定义吧,享,共享,元,基本的意思,合起来就是:大家共享基本的东西。享元模式即为了节约系统资源,讲系统中大量相同或相似的对象进行复用。也就是说如果大量对象相同,大家用这一个就行。享元模式UML类图如图:实例代码如下:最近小黄车挺火,就以小黄车举例吧,话说某天小黄车为了吸引用户使用,又向市场上投放了小蓝车,小黄车和小蓝车架子相同,就是涂的颜色不同。同时,原创 2017-07-27 21:53:02 · 261 阅读 · 0 评论 -
设计模式(10)--外观模式
外观模式即系统很复杂的时候,客户端与系统各个业务类亲自交互也会显得相当复杂,为了降低各个类之间的耦合度,使程序结构变得清晰,外观模式提供了一个外观角色来统一和客户端交互,而复杂的业务类只需和外观角色交互即可。这个外观怎么理解呢?某个系统存在一群复杂的业务交互,但这些业务交互对于客户端而言都看不到,客户端能看到的就是这个外观类,外观类负责在外面挡风遮雨,在客户端来看,它就是复杂业务的外观。外原创 2017-07-26 21:44:15 · 272 阅读 · 0 评论 -
设计模式(21)--策略模式
策略模式即解决问题的策略。当我们需要解决某个问题时,可能会有多种解决问题的办法,这时候,可以将每个办法看成一个策略,我们可以选择其中一个合适策略来解决问题。同时,我们可以方便的更换策略活或者增加策略。策略模式比较容易理解,该模式通过增加一个抽象策略类来定义策略角色。而我们面向抽象编程,使策略模式变得容易扩展。举例:小明去上学,可以走路,可以骑自行车,可以做公交车,他的每一种去学校方式都原创 2017-08-05 16:01:35 · 265 阅读 · 0 评论 -
设计模式(22)--模板方法模式
模板方法,即通过父类定义的模板来执行算法或方法。而这个模板,被称作模板方法,这也是名字的由来。举个例子,本人懒(懒人创造世界),还用上一个策略模式的例子,给他稍作修改:小明 走路(骑自行车或坐公交车) 去上学。这时候,可以定义三个方法,一,getPerson(),不一定是小明,也可能是其他人,howToGetToSchool()方法,选择哪种方式上学,where()方法,不一定去上学,原创 2017-08-06 10:23:11 · 251 阅读 · 0 评论 -
设计模式(12)--代理模式
代理模式的理论在前面的一条博文 JAVA基于反射动态代理 说过了,因为这篇代理模式更侧重说一些理论性的东西,所以侧重点放在了静态代理上,九层之台,起于垒土,明白了静态代理也就很容易理解动态代理了(动态代理是在静态代理的基础上加上了编程的技巧和编程思想的智慧)。代理模式中代理类和真实类要实现相同接口,为什么要实现相同接口呢?这要从代理模式的目的说起,它的目的就是代理真实类,当然,想代理真实原创 2017-07-28 21:20:44 · 283 阅读 · 0 评论 -
设计模式(13)--职责链模式
行为型模式关注对象之间交互,对象之间的通信与协作。共十一个,职责链模式是其中之一。为什么职责链模式属于行为型模式,因为他很好的体现了对象之间的通信与协作,职责链,就是说在这条链上的对象都有这个职责,有职责来做什么呢?处理请求。举个例子,公司审批活动经费,小于5000,副经理就有权限审批,5000-10000,需要经理审批,10000-50000董事长审批,大于50000,召开董事会决定。原创 2017-07-29 10:56:51 · 407 阅读 · 0 评论 -
设计模式(17)--中介者模式
中介者模式从名字来看不难理解,就是给A和B提供一个中间人,扩展开来说就是如果系统中多个系统交互,如果他们各自为战,自己负责和其他所有对象进行交互,最后会形成一张很复杂的交互网,而中介者模式就是来使这张网变得简单,所有对象不用和其他对象一一交互,全都和中介者这个角色交互。从而形成一个简单的星型结构。中介者模式引入了中介者角色。中介者模式和外观模式的区分,中介者模式引入了一个终结者代替对象之间原创 2017-07-31 21:47:46 · 346 阅读 · 0 评论 -
设计模式(7)--桥接模式
中国人起的名字一般都具有某种含义或期许,不是说灵光一闪,脑门一拍就乱定下一个名字来,桥接模式,顾名思义,用桥连接,连接什么呢,连接两个相隔离地方。假设,我们如果要造出1A1B 1A2B 1A3B 1A4B 2A1B 2A2B 2A3B 2A4B八个类,需要建至少挨个写出这八个类,但这是正常人的最简单思维,有没有简单点的方法呢,有,桥接模式,将A和B划分为两个不同维度,建一1A 2A,建1B 2原创 2017-07-18 20:35:49 · 283 阅读 · 0 评论 -
JAVA 基于反射的动态代理
设计模式中有一种模式叫做代理模式,主要用来处理当该类因为某些原因不方便访问,但又要调用访问他的方法时,这时可以使用代理模式.设计一个代理类,通过代理类访问真实类.代理分为静态代理和动态代理.静态代理是程序在编译期代理类就已经确定自己要代理什么对象了,比如,有一位歌星A(真实类),有一位经纪人a(代理类),这个经纪人身上贴了个标签:我只是A的经纪人,就管A的事,其他歌星的事别找我,找我也不管原创 2017-07-11 11:22:19 · 464 阅读 · 0 评论 -
创建型模式前奏之简单工厂模式
创建型模式是用来创建对象的,其中包含设计模式前奏说的共5个设计模式。简单工厂模式不属于23种设计模式,也不属于5种创建型模式,但它是创建型模式的基础,所以以创建型模式前奏为题说一下。工厂模式我们经常见到,不管是数据库连接工厂还是服务器连接工厂或者其他,顾名思义,都是用来提供产品的。简单工厂模式很容易理解,事物都是由简单一步步演化复杂的,就是我们编程最初始思想,就可以水到渠成写出简单工厂模式原创 2017-07-11 21:04:09 · 272 阅读 · 0 评论 -
设计模式(1)--工厂方法模式
上一篇简单工厂模式,如果扩展新的产品类,需要修改工厂类源代码,不符合开闭原则,工厂方法模式通过对工厂类进行抽象,很好的解决了这个问题。工厂方法模式UML类图如图所示:具体实例代码如下所示(其实是在简单工厂模式实例代码的基础上对工厂类进行了一下抽象):抽象工厂类:public abstract class AbstractFactory { public abstract原创 2017-07-12 20:40:20 · 325 阅读 · 0 评论 -
设计模式(2)--抽象工厂模式
上一篇工厂方法模式,一个工厂只生产一个产品,比如手机电池工厂只生产电池不生产别的,摄像头工厂只生产摄像头,不生产别的。而抽象工厂模式,生产一系列产品,比如:苹果手机工厂,生产苹果电池、苹果屏幕、苹果摄像头等有相同共同点的产品。也就是说,我们如果需要某个功能,这个功能按照类别不同,他的属性也就不同,比如:报告生成系统,可以生成pdf格式和word格式两种报告格式,如果是需要生成pdf类型报告原创 2017-07-13 21:16:09 · 217 阅读 · 0 评论 -
设计模式(3)--建造者模式
昨天的抽象工厂模式旨在创建多个产品,比如手机屏幕,手机电池,在这里面,手机屏幕,手机电池都是独立的产品。而建造者模式旨在创建一个产品,但这个产品包含有其他零部件,比如生产手机产品,在这里看,手机是一个产品,建造者模式以生产手机为目的,手机的零部件有电池,屏幕,但是在建造者模式中,电池、屏幕仅仅是手机的一个属性,我们也许会创建电池对象、屏幕对象,但创建他们的目的就是为了组装手机。综上,承接昨天抽原创 2017-07-14 21:08:13 · 259 阅读 · 0 评论 -
设计模式(4)--原型模式
原型模式,顾名思义,以某个对象为原型创建和原型对象相同或相似的新对象。新的被创建的对象占用内存空间和原型对象不同。也就是说,它就是个全新的对象。原型模式和单例模式区分一下,同样得到一个新对象,原型模式创建的是一个全新的对象,而单例模式拿到的一直是相同的一个对象。原型模式分为浅克隆和深克隆两种方式。浅克隆:当原型对象被复制时只复制值类型的成员变量,不复制引用类型的成员变量。深克隆:无原创 2017-07-16 09:50:46 · 224 阅读 · 0 评论 -
设计模式(5)--单例模式
单例模式不难理解,就是在某些情况下,系统只需要获取一个相同的实例对象提供服务,这个时候,建立多个对象纯属浪费资源,比如:连接数据库,建立Session工厂,这个时候,工厂就一个就行,建多了也没用,这个时候可以使用单例模式。正规定义就是:确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。单利模式分为懒汉模式和饿汉模式。懒汉模式是说,当需要实例对象的时候才创建这个实例对象,以原创 2017-07-16 21:13:16 · 209 阅读 · 0 评论 -
设计模式(14)--命令模式
命令模式,用来对请求的发送者和请求的接收者进行解耦的一种设计模式,为什么叫命令模式呢?因为在应用该模式时,引入了一个命令对象。命令模式有三个角色,请求发送者,命令对象,请求的接收者(处理者),谁来给请求发送者和接收者解耦呢,命令对象,所以我们一思考就知道命令模式应该是这样的:请求发送者发送请求,为了增强扩展性,需要面向抽象编程,所以首先有一个抽象命令对象,当然,还要有具体命令对象来对应具体原创 2017-07-29 22:00:27 · 315 阅读 · 0 评论 -
设计模式(15)--解释器模式
解释器模式,还是从名字引定义吧,解释器,解释东西,解释什么?解释我们自定义的语言(或功能)。举个栗子:咱是个java程序员,在写某个应用程序的时候发现经常需要处理“1-2+3-45+56-90”,这样的字符串,经常进行类型转化,逻辑处理太麻烦,我们想个解决办法,我们把种字符串类加减法当成我们自己设计的一种微型语言,我们自己给他设计一个解析器,专门用来解析处理这种字符串。使用形式语言原创 2017-07-30 12:16:24 · 251 阅读 · 0 评论 -
设计模式(6)--适配器模式
今天开始说一下七个结构型模式的第一个模式——适配器模式。结构型模式是什么前面说过,按说不应该造相同轮子,不过为了加强记忆,再造一个轮子又何妨。结构型模式旨在将类和对象组装成更强大的结构。适配器模式理解不难,当我们想调用某个功能时,由于我们现在的系统环境不符合调用它的条件。比如,我们此时调用A接口系统才有更好的扩展和实现,但我们要调用的这个类却没有实现A接口,也就是它和现有接口不兼容,这个时原创 2017-07-17 20:24:44 · 279 阅读 · 0 评论 -
设计模式(16)--迭代器模式
迭代器模式很好理解,简单说就是,我们有个集合,如果不使用迭代器模式,集合就承担了存储数据和遍历数据的多个任务,不符合单一职责原则。而通过使用迭代器,将集合的迭代抽象出来,专门负责集合的迭代。迭代器模式UML类图:其中MyList(自定义集合类)和Iter(迭代器接口实现类)是内部类关联关系示例代码:迭代器接口:public interface Iterator {原创 2017-07-30 21:23:50 · 379 阅读 · 0 评论 -
设计模式(23)--访问者模式
访问者模式,用来解决多个访问者访问多个不同元素的问题。访问者模式引入了访问者角色和被访问者角色,不同访问者访问元素的方式不同。举个例子(该例子来源于 《C#设计模式》刘伟 胡志刚 阎朝坤):公司员工分为全职员工和兼职员工(这里员工就是被访问者),公司有财务部结算工资,人力资源部计算工作时长(这里财务部和人力资源部为访问者),于是就有了不同访问者访问不同被访问者的情况。访问者模式UML类原创 2017-08-06 19:03:05 · 300 阅读 · 0 评论