- 博客(17)
- 问答 (1)
- 收藏
- 关注
原创 设计模式之合成模式
1 什么是合成模式 合成模式属于对象的结构模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 这定义看着太抽象了,我们举个栗子。在二维图形中,线、圆、矩形等都可以看作是图形,而通过简单图形组合起来的图形也可以看作图形。 2 如何实现合成模式 合成模式可分为安全式和透明式。 简单说来就
2016-07-31 19:10:26 685
原创 设计模式之观察者模式
1 什么是观察者模式 观察者模式是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。 这个定义也有些抽象,简单来说,就是类似于订阅报纸系统,每当报社有新闻时,就会给订阅的用户推送。 2 如何实现观察者模式同样以一个简单的问题作为入口。
2016-07-31 19:07:00 325
原创 设计模式之访问者模式
1 什么是访问者模式 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这种操作需要修改的话,接受这个操作的数据结构则可以保持不变。 2 如何实现访问者模式同样以一个简单的问题入手。 * 某公司有很多员工,作为老总,你可能会想知道一些他们的信息,比如每个人的月薪、年假时间、日工作时长等 很明显这个问题中数据结构相
2016-07-30 22:35:31 304
原创 设计模式之不变模式
1 什么是不变模式 一个对象的状态在对象被创建后就不再变化,这就是不变模式。 2 如何实现不变模式不变模式可分为强不变模式和弱不变模式,区别就是弱不变模式中,其子类对象的状态可以变化。 不变模式很简单。 只要达成以下条件,就可以认为是强不变模式。 * 不变类中没有方法修改对象的状态。 * 不变类中所有属性都为私有。 * 不变类中引用的其他对象
2016-07-30 22:33:39 473
原创 设计模式之备忘录模式
1 什么是备忘录模式 备忘录模式又叫做快照模式或Token模式,是对象的行为模式。备忘录对象是一个用来存储另一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。 2 如何实现备忘录模式同样为了容易理解,我们以一个简单问题为入口。 * 假设你正在开发
2016-07-29 20:17:02 336
原创 设计模式之适配器模式
1 什么是适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 这很好理解。假如你在美国买了一款电器回中国,这时候是不能直接插上插座就用的,因为美国的生活电压是110V,而中国的是220V,这时候需要一个220V转110V的适配器来转换电压。 同样的,在代码中,如果一个接口和目标接口不一致,但只能用目标接口时,就需要用到适配器。 2 怎么实现适配器模式为了便于理解,还是以一个简单的问题为入口。
2016-07-28 18:45:50 345
原创 设计模式之桥接模式
1 什么是桥接模式将抽象化与实现化脱耦,使得两者可以独立的演化。举个简单的例子。物品从感性上划分可分为可爱的、冷酷的、热情的等,从性质上划分可分为各类物品,比如:花、草、树、鸟等。这样就出现了排列组合的问题,花可以有可爱的、冷酷的、热情的,同样其他性质的物品也是。如果给每个这样的组合都做一个类,工作量就太大了。这时就需要引入桥接模式。2 桥接的实现桥接的主要原理是把两个维度上的扩展分开,也就是解耦合。同样先引入一个简单的小问题。 * 空中巴士(Airbus)、波音(Boeing)
2016-07-27 10:11:42 413
转载 代码重构的原则
代码重构追求的原则是将行为尽量移动到结构的高端,而将状态尽量移动到结构的低端。1995年,Auer曾在文献[AUER95]中指出:(1) 应当根据行为而不是状态定义一个类。也就是说,一个类的实现首先建立在行为的基础之上,使用间接的引用而不是直接的引用。换言之,应当使用取值方法而不是直接引用属性。(2) 在实现行为时,是用抽象状态而不是具体状态。如果一个行为涉及到对象的状态时,使用间接引
2016-07-26 14:21:23 595
原创 设计模式之命令模式
1 什么是命令模式命令模式是把一个请求或操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录到请求日志,可以提供命令的撤销和恢复功能。 简单来说,把原来一个代码片段命令封装成一个命令对象,然后可以被客户按情况使用。 2 如何实现命令模式同样还是以一个简单的问题作为入口。 * 假设电视机有三种操作:开机、关机、换台 * 通过遥控器可以发出这三种命令 * 要求通过Command模式实现
2016-07-26 12:54:11 568
原创 设计模式之门面模式
1 什么是门面模式门面模式是对象的结构模式。外部与一个子系统的通信必须通过一个统一的门面对象进行,这就是门面模式。通俗来说,就是一个系统内部很复杂,但这个系统有一个很简单的对外按钮,只需要按下按钮,这个系统就能工作了,这个按钮就是我们所说的门面。2 如何实现门面模式同样以一个简单的例子作为入口。 * 现有一个保安系统,由两个录像机、三个灯泡、一个遥感器和一个报警器组成。 * 保安系统的操作人员需要经常的启动和关闭这些设备。对于这个保安系统,里面东西相对较多,而操作人员如果每天都要挨个
2016-07-25 10:49:44 574
原创 设计模式之单例模式
1 什么是单例模式作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。2 怎么实现单例模式现在假设有这样一个问题: * 现在小明家只有一辆汽车和一辆自行车,而大家都可以获取来使用。面对这样一个问题,我们就需要保证系统中最多产生一辆汽车和一辆自行车。首先,要封闭构造方法,这样外部就不能通过new的方法来产生新的对象。然后就是对外提供一个获取实例的方法。具体实现起来有两种的模式,即饿汉模式和懒汉模式。饿汉模式是程序运行
2016-07-24 10:09:56 370
原创 设计模式之工厂模式
1 简单工厂简单工厂又称静态工厂模式,通常可以理解为通过一个类的静态方法来产生具体的类。举个简单的栗子。现有三种水果:苹果、葡萄和草莓。需要一个类来负责生产这些水果。 这时,即使没学过简单工厂模式的人也很容想到,设计一个类,里面有一个静态方法,通过调用该方法,传入不同的名字,来产生不同的对象。 为此我们先抽象出一个水果类Fruit package com.i
2016-07-23 10:28:15 338
原创 设计模式之代理模式
1 什么是代理模式代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。2 怎么实现代理模式首先我们要知道代理模式按使用目的可分为以下几种: * 远程代理:为一个位于不同的地址空间的对象提供一个局域代表对象。 * 虚拟代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。 * 保护代理:控制对一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。智能引用代理:当一个对象被引用时,提供一些额外的操作,比如将此对
2016-07-20 20:40:29 454
原创 设计模式之策略模式
1 什么是策略模式?策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。生活中有很多需要策略模式的例子,举个比较简单的。某购物网站,需要针对某些书进行打折促销,但不同书的打折策略不一定相同。对教材类的书每本减免10元,对连环画采用每本优惠%7,其他图书没有优惠。这时候我们需要对不同的对象采用不同的策略。2 怎么用策略模式?我们以一个问题入手。 * 现有一个超市,针对
2016-07-19 23:00:52 638
原创 总结半年的游戏开发经验
转眼我做游戏开发已经半年多了,回顾这半年,印象最深的是当初一心想学游戏什么都阻挡不了我的决心。记得那会为了学游戏,网上找了好多资料,才确定从cocos2d入门。然后下了好多入门的电子书和视频。那会刚好是学校课程最多的一个学期。基本每天都是满课,一周晚上4天有选修。为了挤出时间学习,养成了一个习惯,吃饭的时候看一集教学视频。这个习惯持续到现在,感觉还不错。好了,不多说往事了,这里给新人们介绍一下游戏
2016-07-18 20:11:33 5871 1
原创 写给新人的面向对象的基本思维
个人接触编程的时间也5年了,全职写代码的时间差不多也有近3年了,但这段时间走了很多弯路,一是因为身边没有经验丰富的开发者,二是很少接触程序设计方法论方面的知识。导致我看文档写代码能力是提高了,但设计能力一直不强,对工程的管理也不擅长,对面向对象的理解也不深入。最近在补设计方法方面的知识,写下这篇笔记,既方便以后复习,也是为新手答疑解惑。 1.面向对象和面向过程的区别先说一下我对面向对象
2016-07-12 09:31:11 7219 6
原创 正则中不常用却很实用的技巧
正则的是非常实用的类库。今天要介绍一下最容易被忽略的但很实用的一些知识点。1. 向前引用。这个功能不常用,但却很实用。那么什么时候可能会用到这个功能呢? 这里简单举一个栗子。要求:给你一个英文句子,要求取出所有重复出现的单词。例如: I like java, while you don’t like java. 这时候如果不用向前引用,应该如何解决?我可能会先匹配出所有
2016-07-10 19:34:30 443
空空如也
三层交换机子网划分问题
2017-01-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人