随笔分类 -  设计模式

状态模式 state
摘要:状态模式:允许对象的内部状态改变时改变它的行为,对想看起来好像修改了它的类。 状态模式和策略模式比较相似(类图就完全一样),都是A对象关联B对象,而B是可以更换的,A对象的功能随着B的具体实现的改变而改变。策略模式一般都是B对象在A对象所在的上下文中改变。而状态模式则是在B对象(状态对象)完成一定的操作在B对象内部吧A关联的B的具体实现更换。对于A来说就像是一个封闭的机器,内部实现了一... 阅读全文
posted @ 2008-06-28 01:48 笑笑江南 阅读(441) 评论(0) 推荐(0)
迭代器模式 Iterator
摘要:迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而有不暴露起内部的表示。 【Head First design pattern】 下面来分析一个Demo: 这个就是"聚合对象中的元素"。 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com... 阅读全文
posted @ 2008-06-25 16:01 笑笑江南 阅读(363) 评论(0) 推荐(0)
策略模式 strategy
摘要:策略模式: 定义算法族,分别封装起来,让他们可以互相替换,从而使算法的变化独立与算法的使用者。 类图: 比如说有一个类,需要用到排序,而排序方式自然是多种多样的,显然在这个类中直接用一个方法进行排序是不太好的做法,因为它不能做到在不同情况下使用不同的算法排序。我们怎样应对这中不同的需求呢。我们可以把不同的排序方法封装到不同的类(排序类)中,这些类实现一个共同的接口(排序接口)。... 阅读全文
posted @ 2008-06-24 12:48 笑笑江南 阅读(372) 评论(0) 推荐(0)
外观模式 facade
摘要:外观模式 facade 定义:提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 示意图: 应用场景:clients 对Subsystem Classes的调用有时是很繁杂的,而这些复杂的调用逻辑对于Clients是不必要的。我们可以把复杂的调用逻辑分装到Facade,然后通过Facade间接调用。 ... 阅读全文
posted @ 2008-06-20 12:09 笑笑江南 阅读(202) 评论(0) 推荐(0)
适配器模式 adapter
摘要:适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。 类图: 用最直白的话说就是:正写着ClassA的代码的时候发现我要实现的功能很大一部分都在ClassB里已经实现了。那好直接拿着来用呗。但别人调用的时候要的是ClassA不是ClassB啊,当然你的设计不是那么僵化的话需要的会是IClassA。那行你不是要IClassA吗,ClassA实现ICla... 阅读全文
posted @ 2008-06-19 13:49 笑笑江南 阅读(302) 评论(0) 推荐(0)
单件模式 singleton
摘要:概述:我们很多时候需要一个类只产生一个实例。类似双击金山词霸一个金山词霸的进程运行起来了,然后你在双击并没有在运行一个新的进程。运行两个程序除了浪费资源以外没有任何其他作用。另外有时后生成多个对象还会出现意想不到的问题。 单件模式:确保一个类只有一个实例,并提供一个全局访问点。 实现分析:要保证只有一个实例,就不能让客户代码能够 new 出这个类的一个对象来。而应该让这个类本身来管理对... 阅读全文
posted @ 2008-06-19 09:35 笑笑江南 阅读(303) 评论(0) 推荐(0)
设计模式之抽象工厂(AbstractFactory)---用抽象工厂实现网页样式生成器
摘要:意图[gof 设计模式]:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 我们经常会碰到这样一种情况,我们需要一系列的平级对象来共同完成一种服务。对象的变化更多的是系列间的变化,而不是系列对象内部关系的变化。比如说数据库操作相关类。命令对象,链接对象,适配器对象。我们需要增加一种新数据访问相关对象的可能性比较小。但是从mssql 命令对象,连接对象....到ora... 阅读全文
posted @ 2008-06-10 17:29 笑笑江南 阅读(363) 评论(0) 推荐(0)
装饰者模式(Decorator)
摘要:每天上班都要跑很远,既要走公路,又要爬山。不过现在我有一辆小车,可以在公路上跑。我还有一个飞行器,可以翻山。嘿,如果我高兴我还可以用飞行器吊着小车跑(当然我的小车重量是可以忽略的,要不我直接用飞行器不就行了吗,之所以这样我想它即是汽车也是飞行器,两者的功能可以同时发挥)。 看看我的设计吧: 这是装饰者和被装饰这共同的接口(也就是说我,飞行器,小汽车说到底可以看成是同一类东西) ... 阅读全文
posted @ 2008-06-09 23:37 笑笑江南 阅读(227) 评论(0) 推荐(0)
桥接模式 bridge
摘要:桥接模式: 将抽象和行为划分开来,各自独立,但能动态的结合。 在这里抽象不是表示抽象类或接口,而是表示对应于现实的一种实体的集合。比如说人就是一种抽象,吃饭就是一种行为。抽象不一定有行为。但行为一定是依附于抽象的。对于抽象的不同子集会有不同的行为。而同样的行为也可能属于抽象的不同子集。这样我们可以把行为抽取出来进行不重不漏的分类封装。从而和抽象的子集进行"排列组合"。 类图: 下面来... 阅读全文
posted @ 2008-06-06 11:33 笑笑江南 阅读(298) 评论(2) 推荐(0)
观察者模式
摘要:观察者模式是实现一个对象对多个对象通知的解决方案(订阅和发布关系),任何人只要符合一定的条件(实现订阅者接口)就可以订阅一份报纸。报馆向每一个订阅了该报纸的人投递报纸。订阅者可以随时退订报纸,其他的人也可以随时订阅报纸。 //订阅者接口,只要你能够接收报纸,我就让你订阅。 1namespace Observer 2{ 3 public interface IReceiv... 阅读全文
posted @ 2008-06-04 16:19 笑笑江南 阅读(332) 评论(1) 推荐(0)
设计模式(1)工厂方法 感觉没必要用工厂方法
摘要:看了一篇 关于工厂方法的文章 http://terrylee.cnblogs.com/archive/2006/01/04/310716.html 有人提出 string strlogName=System.Configuration.ConfigurationSettings.AppSettings["logName"]; Log log; log=(Log)Assembly.Load("Wi... 阅读全文
posted @ 2008-06-02 01:05 笑笑江南 阅读(263) 评论(0) 推荐(0)