Design Patterns
本专栏介绍23种设计模式及其原则。
在每种设计模式中既有理论的介绍,也有本人自己编的实例,提供给学习设计模式的童鞋们。
水田如雅
不生产代码,只是代码的搬运工
展开
-
桥接模式处理下机计算金额问题
因为下机受到计算钱到两个参数的影响,一个是用户类型,一个是收费策略,所以就用桥接模式分开这两个变化,比起以前写N*M个 策略上机策略更易于扩展和应对变化,可以加上很多类型的用户,也可以写很多如何收费的方法,如果两个方向的子类都很多,那么产生的N*M中组合也会很大,和主要使用策略模式相比,这种结构感觉是一种动态生成策略,比提前写好所有的策略更灵活。原创 2014-08-13 22:05:51 · 1702 阅读 · 10 评论 -
取消基本数据的修改——备忘录模式的应用
备忘录模式是将要保存对象封装到一个备忘录对象中,所以当如果要保存的数据非常大的时候,这时候存入内存中,消耗的资源肯定比频繁连接数据库读取数据所要消耗的资源多,权衡两种实现“取消”的方法,这时候我们在使用这个模式的时候就要考虑下了。原创 2014-08-10 21:23:47 · 1961 阅读 · 14 评论 -
重构中对设计模式的反思
什么是设计模式? 每一类编程语言都具有其自身的特性,就像是面向对象的语言,其特性就是封装,继承,多态,抽象. 同时,使用每一类编程语言开发软件时也都有一些设计准则,这些准则保证了软件的质量,即具有良好的设计. 而设计模式则是广大软件开发人员总结出的开发经验技巧,它们利用编程语言的特点,实现这些准则.因此,可以想象,当我们对设计模式熟悉到一定程度后,在设计系统时,我们眼里就会变得原创 2014-07-06 16:10:50 · 2302 阅读 · 31 评论 -
机房收费重构——关于上下机的再思考
有句话叫做no zuo no die,我大概就是这种人吧。why?做机房收费系统的时候,按照一般方法也能实现,但这次做上下机的时候,感觉这么做没有什么好玩儿的了,然后就停下来,重新想想上下机还能怎么做? 后来,大致采用的思路是这样的:将上下机的读写数据的过程写成两个存储过程,负责读取和更改数据。中间的计算过程写在代码里面:中间判断时间的过程用职责链模式来实现,判断一般用户原创 2014-06-14 10:10:48 · 2483 阅读 · 39 评论 -
单例模式——解决MDI子窗体实例化的问题
机房收费系统进行有一段时间了,但是始终有些历史遗留问题。比如,如何MDI子窗体如何显示在上层的问题和MDI子窗体实例化的问题。 对于如何显示在上层的问题,我这次采用的还是SetParent函数,在模块里面添加: '定义一个用来设置子窗体的函数 Declare Function SetParent Lib "user32" Alias "SetParent" (原创 2014-06-01 21:33:38 · 3357 阅读 · 19 评论 -
迭代器模式(Iterator)
1, 从 For循环说起 在几乎所有的编程语言中,都有3大结构:顺序,选择,循环。它们就像是3种框架,用来搭建不同的模型。在这3种结构中,最为独特的,要当属循环结构了。其实,我觉得叫它“懒人结构”更好。 我们自己是比较擅长处理顺序和选择的,但是如果这些东西交给计算机处理,那么我们就要为编写很多代码,告诉它出现的各种情况,应该怎样处理各种情况,这对于计算机来原创 2014-04-01 21:05:05 · 2117 阅读 · 17 评论 -
概述:3种设计模式
什么是设计模式? 设计模式的每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复劳动. 设计模式让我们站在了巨人的肩膀上,告诉我们不是解决任何问题都是要从头开始的。3种设计模式首先来看设计模式是如何分类的: 我们根据根据两条准则对设计模式进行分类:1,目的准则:模式是用来原创 2014-03-31 21:52:34 · 2530 阅读 · 19 评论 -
组合模式(Composite)
组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式结构 组合模式非常好的解决了一个整体与部分可以被一致对待的问题。那么,什么叫“整体与部分可以一致对待”呢? 例如:原创 2014-03-23 11:11:59 · 2203 阅读 · 20 评论 -
备忘录模式(Memento)
以前有位巨人常常强调备份的重要性。也许,只有经历过当文件找不到的悲哀才体会到吧。 为了做一个淡定的人得意,对于重要的文件,我们要留有副本。原创 2014-03-22 17:29:47 · 2335 阅读 · 15 评论 -
适配器模式(Adapter)
适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式结构原创 2014-03-22 11:34:16 · 2182 阅读 · 17 评论 -
状态模式(Statue)
状态模式:当一个对象的内在状态改变时运行改变其行为,这个对象看起来像是改变了其类。状态模式结构 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。适用性 1,一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为.原创 2014-03-21 20:41:47 · 2610 阅读 · 17 评论 -
创建型模式中关于工厂的模式
在创建型模式中,有3中关于工厂的模式,分别是:简单工厂模式,工厂方法模式,抽象工厂模式。这3中模式既有各自的优点,同时,这3中模式又可以逐步演化:如,简单工厂可以演化成工厂方法,工厂方法可以演化成抽象工厂。 简单工厂到工厂方法 由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添原创 2014-03-21 11:09:41 · 2064 阅读 · 20 评论 -
观察者模式(Observer Pattern)
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.模式结构观察者模式的好处: 观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。何时使用?1,当一个对象原创 2014-03-21 09:41:02 · 2762 阅读 · 19 评论 -
建造者模式(Builder)
建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 模式结构 建造者模式的好处: 建造者模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要原创 2014-03-20 20:27:23 · 2356 阅读 · 16 评论 -
简谈设计模式的几个原则
最近设计模式进行到一半,停了两天没有敲代码,但是把整本书的内容看了又看,整理下思路。。。 刚学了一周多,但是对大话设计模式这本书我有一种一见如故的感觉。它里面的很多话我都觉得很经典。 比如,在序的前面,有一张非常空白的纸上,写了3段话,其中有一段是这样说的:了解优秀软件设计的演变过程比学习优秀设计本身更有价值,因为设计的演变过程中蕴藏着大智慧。 这本书的作者在每一章节,都用了原创 2014-03-18 23:17:33 · 2307 阅读 · 19 评论 -
外观模式
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。模型 其中,所定义的外观类需要了解所有子系统的方法和属性,并将子系统的方法和属性组合,以备外界调用。 示例 在电影里面,我们常常看到导演带领很多人在那里拍戏,每次导演喊“actoion”,然后各个部门就都投入动作中;当导演喊原创 2014-03-13 17:29:06 · 2309 阅读 · 23 评论 -
模板方法
模板方法定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 结构 AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。代码原创 2014-03-13 16:51:19 · 2071 阅读 · 15 评论 -
原型模式
自从克隆羊多莉但是后,Clone这个词就流行了起来。 在设计模式中,也有一种Clone的技术——原型模式,可以实现对象的克隆。原创 2014-03-13 12:20:24 · 2225 阅读 · 11 评论 -
工厂方法
模型 工厂方法模式(factory method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。工厂方法和简单工厂方法看起来大部分是一样的,只是在工厂这里,简单工厂是通过Switch语句进行选择然后实例化对象,而在工厂方法里面,对工厂进一步抽象,定义了一个工厂接口,让每一类产品对应一个工厂接口,在实例化具体产品原创 2014-03-11 21:04:54 · 2275 阅读 · 6 评论 -
代理模式
代理模式模型 为其它对象提供一种代理以控制对这个对象的访问. 示例 在高中的时候,有很多害羞的孩纸们有了暗恋的对象后,如果自己不好意思给自己的女神或者男神送礼物的话,通常都会找一个跟自己暗恋者关系比较好的,托它帮自己送东西,这种恋爱的方式就是代理模式。说通俗一点儿,就叫原创 2014-03-11 11:54:27 · 2346 阅读 · 17 评论 -
装饰模式
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.原创 2014-03-11 11:02:14 · 2017 阅读 · 11 评论 -
策略模式
它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。 策略模式的结构图: 在策略模式中,核心代码为:原创 2014-03-10 20:43:24 · 2270 阅读 · 18 评论 -
简单工厂模式
简单工厂模式的核心,就是用一个单独的类,来完成创造实例的过程。简单工厂模式示例 例如,现在有一个CPU的工厂,它们目前生产3款CPU,型号分别为:8086,880,8085,具体生产那种型号的CPU,要看顾客怎么下单,如果顾客要求生产8086型号的CPU,那么,工厂接到单子后,就马上生产处一批8086的CPU,在这个过程中,顾客根本不用知道这款CPU是怎么生产的,它原创 2014-03-09 11:40:13 · 2549 阅读 · 26 评论