[随笔分类]设计模式
jiangnet
这个作者很懒,什么都没留下…
展开
-
单件模式 singleton
概述:我们很多时候需要一个类只产生一个实例。类似双击金山词霸一个金山词霸的进程运行起来了,然后你在双击并没有在运行一个新的进程。运行两个程序除了浪费资源以外没有任何其他作用。另外有时后生成多个对象还会出现意想不到的问题。 单件模式:确保一个类只有一个实例,并提供一个全局访问点。 实现分析:要保证只有一个实例,就不能让客户代码能够 new 出这个类的一个对象来。而应该让这个类本身来管理...2008-06-19 09:35:00 · 125 阅读 · 0 评论 -
设计模式之抽象工厂(AbstractFactory)---用抽象工厂实现网页样式生成器
意图[gof 设计模式]:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 我们经常会碰到这样一种情况,我们需要一系列的平级对象来共同完成一种服务。对象的变化更多的是系列间的变化,而不是系列对象内部关系的变化。比如说数据库操作相关类。命令对象,链接对象,适配器对象。我们需要增加一种新数据访问相关对象的可能性比较小。但是从mssql 命令对象,连接对象....到ora...2008-06-10 17:29:00 · 107 阅读 · 0 评论 -
桥接模式 bridge
桥接模式: 将抽象和行为划分开来,各自独立,但能动态的结合。 在这里抽象不是表示抽象类或接口,而是表示对应于现实的一种实体的集合。比如说人就是一种抽象,吃饭就是一种行为。抽象不一定有行为。但行为一定是依附于抽象的。对于抽象的不同子集会有不同的行为。而同样的行为也可能属于抽象的不同子集。这样我们可以把行为抽取出来进行不重不漏的分类封装。从而和抽象的子集进行"排列组合"。类图: 下面来谈一谈防...2008-06-06 11:33:00 · 171 阅读 · 0 评论 -
观察者模式
观察者模式是实现一个对象对多个对象通知的解决方案(订阅和发布关系),任何人只要符合一定的条件(实现订阅者接口)就可以订阅一份报纸。报馆向每一个订阅了该报纸的人投递报纸。订阅者可以随时退订报纸,其他的人也可以随时订阅报纸。 //订阅者接口,只要你能够接收报纸,我就让你订阅。 1namespace Observer 2{ 3 public interface IReceiver...2008-06-04 16:19:00 · 102 阅读 · 0 评论 -
状态模式 state
状态模式:允许对象的内部状态改变时改变它的行为,对想看起来好像修改了它的类。 状态模式和策略模式比较相似(类图就完全一样),都是A对象关联B对象,而B是可以更换的,A对象的功能随着B的具体实现的改变而改变。策略模式一般都是B对象在A对象所在的上下文中改变。而状态模式则是在B对象(状态对象)完成一定的操作在B对象内部吧A关联的B的具体实现更换。对于A来说就像是一个封闭的机器,内部实现了一...2008-06-28 01:48:00 · 84 阅读 · 0 评论 -
迭代器模式 Iterator
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而有不暴露起内部的表示。 【Head First design pattern】 下面来分析一个Demo: 这个就是"聚合对象中的元素"。<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)&l...2008-06-25 16:01:00 · 100 阅读 · 0 评论 -
策略模式 strategy
策略模式:定义算法族,分别封装起来,让他们可以互相替换,从而使算法的变化独立与算法的使用者。类图: 比如说有一个类,需要用到排序,而排序方式自然是多种多样的,显然在这个类中直接用一个方法进行排序是不太好的做法,因为它不能做到在不同情况下使用不同的算法排序。我们怎样应对这中不同的需求呢。我们可以把不同的排序方法封装到不同的类(排序类)中,这些类实现一个共同的接口(排序接口)。 "使用排...2008-06-24 12:48:00 · 99 阅读 · 0 评论 -
外观模式 facade
外观模式 facade 定义:提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。示意图: 应用场景:clients 对Subsystem Classes的调用有时是很繁杂的,而这些复杂的调用逻辑对于Clients是不必要的。我们可以把复杂的调用逻辑分装到Facade,然后通过Facade间接调用。 实现...2008-06-20 12:09:00 · 135 阅读 · 0 评论 -
适配器模式 adapter
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。 类图: 用最直白的话说就是:正写着ClassA的代码的时候发现我要实现的功能很大一部分都在ClassB里已经实现了。那好直接拿着来用呗。但别人调用的时候要的是ClassA不是ClassB啊,当然你的设计不是那么僵化的话需要的会是IClassA。那行你不是要IClassA吗,ClassA实现IClass...2008-06-19 13:49:00 · 162 阅读 · 0 评论 -
设计模式之命令模式(Command)
定义: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。(网上很多地方引用的定义) 将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。命令模式也支持可撤销的操作。 (Head First 的定义) 解读: 请求说的更傻一点就是求别人为自己服务,对应到程序中,...2008-06-13 18:08:00 · 206 阅读 · 0 评论