随笔分类 -  [10] 设计模式

摘要:因为前段日子比较忙,所以好些日子没有写博客了,而这个设计模式系列也就被耽搁了, 现在又比较清闲了,所以打算将这个系列写完,还望大家支持。 引子 先来看一个描述,这个描述呢是来自《Java 与模式》这本书: 说的是,在 1979 年出土的那个什么编钟, 这个编钟呢,上面有 n 多的钟,敲打它就可以发出声音,那么这和状态模式扯得上什么关系呢? 很明显,编钟可以发出声音,并且这些声音是可以变化的,编钟的... 阅读全文
posted @ 2010-06-22 14:09 小宝马的爸爸 阅读(3295) 评论(10) 推荐(4) 编辑
摘要:引子 先来看一个现象,那就是肯德基或者是麦当劳的例子, 肯德基和麦当劳光在中国就有无数的店面,但是为什么每个店面里的食品味道都是差不多的, 你在店 A 中吃的东西的味道,在店 B 中还是这个味道,这是如何做到的呢? 为什么在中国, n 个餐馆里面,一道青椒炒肉有 n 个不同的味道呢? 首先,看中国菜--青椒炒肉,n 个餐馆里面的厨师都是不同的, 鬼晓得这些厨师是自学成才还是从新东方烹饪... 阅读全文
posted @ 2010-05-30 22:54 小宝马的爸爸 阅读(2755) 评论(5) 推荐(5) 编辑
摘要:有的时候,我们需要一个实例时,并且,当创建一个实例的过程比较复杂或者说是昂贵时,比如,创建实例的构造函数非常的复杂,在执行这个构造函数时会消耗较长的时间,同时呢,这个构造函数中的一些信息又没有什么变化(也就是说创建第一个实例时初始化信息是这样的,创建第二个实例时初始化信息还是还是这样的),那么直接使用 new 来创建这样一个实例就显得太昂贵了,最好的解决方法,并不是使用 new 来实例化一个对象,... 阅读全文
posted @ 2010-05-22 17:46 小宝马的爸爸 阅读(2547) 评论(8) 推荐(4) 编辑
摘要:为了深刻点理解代理模式,我们先来看一个 Demo , 首先这个 Demo 是用来测试 QQ 号码是否在线, 这里涉及到的内容是 Web 服务的使用, 这个 Web 服务所在地址为: http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx 如果有不懂 Web 服务的,还可以查看笔者一篇涉及 Web 服务的文章,... 阅读全文
posted @ 2010-05-18 07:45 小宝马的爸爸 阅读(3429) 评论(6) 推荐(6) 编辑
摘要:在面向对象设计中,总是会要使用集合对象的,这些集合对象的内部结构可能是非常复杂的, 但是作为客户端使用的话,我们只需要关心集合内部的数据和遍历集合内部的数据就可以了, 如果以最简单的设计来实现的话,大可以定义一个类,类中定义一个诸如数组,栈,队列之类的对象, 然后将数据的存储以及数据的遍历全部交给这一个类来完成,但是在面向对象中还有这样一个设计原则, 也就是单一责任原则(对于一个类来说,应... 阅读全文
posted @ 2010-05-14 02:49 小宝马的爸爸 阅读(2776) 评论(1) 推荐(3) 编辑
摘要:首先谈论一下模板方法的重要性和意义所在,其实,很多人都应该使用过模板方法了, 只是他们自己没有意识到而已,比如,您新建一个 Form 或者是 Page 的时候便是使用了模板方法, 因为窗体继承自 Form 而页面则是继承自 Page ,在这里您便可以把 Form 和 Page 看做是一个模板, 而我们在自己的窗体或者是页面中的操作只不过是定义了属于我们自己的具体算法而已。 模板方式模式是基... 阅读全文
posted @ 2010-05-12 18:38 小宝马的爸爸 阅读(2141) 评论(1) 推荐(5) 编辑
摘要:适配器模式(Adapter) 还是先从引入说起,先来看一个问题吧,总所周知,在中国通用的电压时 220V, 而美国电压则是 110V,如果有经常在美国和中国之间跑的 IT 人,而其笔记本都是随身携带的, 那么它的笔记本的电压问题如何解决呢? (因为在美国和中国电压不同,所以一般的电器会不通用的) 而适配器在这个问题上体现得妙极妙极。 现在的笔记本都有一个电源适配器,而正是这个电源适配器... 阅读全文
posted @ 2010-05-10 15:31 小宝马的爸爸 阅读(4859) 评论(9) 推荐(5) 编辑
摘要:看了很多命令模式方面的资料,感觉最经典的实例就是餐厅的那个例子, 确实这个餐厅的例子在一定层面上很好的解释了命令模式以及命令模式的真正用途, 当然其也存在一定的问题(下面会提到) 所以下面也还是从这个餐厅来说起。                ... 阅读全文
posted @ 2010-05-08 07:53 小宝马的爸爸 阅读(3730) 评论(10) 推荐(6) 编辑
摘要:首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了, 比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个, 这里就可以通过单例模式来避免两个打印作业同时输出到打印机中, 即在整个的打印过程中我只有一个打印程序的实例。 简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中, 任何一个时刻,单例类的实例都只存在一个(当然也可... 阅读全文
posted @ 2010-05-07 08:08 小宝马的爸爸 阅读(63202) 评论(61) 推荐(58) 编辑
摘要:先来明确一个问题,那就是有的时候,实例化这个活动不应该总是公开的进行, 也就是不要公开的使用 new 操作符,因为,这样容易造成耦合问题。 我们不应该针对实现编程,但是当我们在使用 new 的时候,便是针对实现编程, 而如果您要实例化的话,必须要使用 new 这个关键字, 很明显,这是一个矛盾问题!!! 当然这里的矛盾并不是说不能够使用 new ,而是更好的使用了 new。 那么如何来... 阅读全文
posted @ 2010-05-06 13:33 小宝马的爸爸 阅读(7494) 评论(36) 推荐(33) 编辑
摘要:首先来看一个例子: 比如,饮料可以分为很多种类,而这里我取一个咖啡,那么这个咖啡呢,有多种形式的, 比如有加糖了的咖啡,有加奶的咖啡,也有加热了的咖啡,也有加了冰块的咖啡。 而各个顾客的选择却是不同的,比如,有的客户是要加糖的咖啡,而有的客户却是要加冰的咖啡, 也就是需求是各种各样的,那么如何实现这种情况呢? 先来看一种愚笨的做法,那就是你可以通过继承来实现, 虽然上面的做法确实可以提供... 阅读全文
posted @ 2010-05-04 17:34 小宝马的爸爸 阅读(1487) 评论(3) 推荐(6) 编辑
摘要:先来看一个范例:一般来说,报社的业务就是出版报纸,而作为用户呢,您可以在这家报社订阅报纸,这样的话,只要报社有出了新报纸的时候,便会给订阅其报纸的用户发送,也就是,只要你是报社的用户,那么当报社有新报纸的时候,报社就会给你送一份报纸过来,同时,你也可以取消你在这家报社订阅的报纸,这样的话,你就不会收到由这家报社送过来的报纸了。在来看下面的截图: 其实呢,上面描述的问题就是一个典型的观察者模式,观察... 阅读全文
posted @ 2010-05-03 12:22 小宝马的爸爸 阅读(1704) 评论(5) 推荐(2) 编辑
摘要:先来看一副 Class Diagram 上面这副类图呢,表明,如果您要上学的话,你有四种策略, 您可以走路去,可以坐公交车,可以骑自行车,可以开私家车, 上面的即是一个最简单的策略模式结构图了 先来明白一下聚合关系是什么? 比如 A 对象可以包含 B 对象,但 B 对象不是 A 对象的一部分,则 A 和 B 之间就是一种聚合关系。 比如一个人是属于一个家庭的,而一个家庭可以有多个人, ... 阅读全文
posted @ 2010-05-02 14:36 小宝马的爸爸 阅读(1483) 评论(0) 推荐(2) 编辑
摘要:首先给出一堆委托的介绍内容,不理解的话,也没有问题,等看了 Demo 再回过头来看就 OK 了: 委托是一个类,它定义了方法的类型,使得可以将方法当做另一个方法的参数来进行传递, 这种将方法动态地赋值给参数的做法, 可以避免在程序中大量的使用判断语句,同时使得程序具有更好的扩展性。 委托是一个可以保存对方法的引用的类,委托类具有一个签名, 并且它只能对与其签名匹配的方法进行引用, 这样... 阅读全文
posted @ 2010-05-02 14:35 小宝马的爸爸 阅读(995) 评论(0) 推荐(1) 编辑
摘要:面向对象中最常提到的就是对象,类,实例这些, 既然是面向对象的话,那先从对象谈起, 对象 首先,一切事物皆为对象,对象是一个实体,其可以包含自己的特性和特定的行为。 类 就是将一些对象所具有的相同属性和相同的行为进行提取出来,也就是抽象, 提取出来后便会组成一个集合,那么这个集合就是类, 所以类,也可以理解为是对类似的对象分类的意思。 实例 就是一个真实的对象,由于前面使用类来对... 阅读全文
posted @ 2010-05-01 16:32 小宝马的爸爸 阅读(982) 评论(0) 推荐(2) 编辑