
设计模式
文章平均质量分 54
mydriverc
技术为本
展开
-
服务器端软件的一种设计
服务器端软件的复杂度相对比较高。30000多行代码的中间件软件的主线程程序又是怎样的呢? 小鸡射手在实际工作中设计的网络服务的主线程代码如下:IContext& context = ContextManager::GetContext();IEventHandler& handler = EventHandlerManager::GetEventHandler();wh转载 2008-03-11 14:15:00 · 869 阅读 · 0 评论 -
命令模式
命令模式 命令(Command)模式命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分转载 2007-06-04 14:00:00 · 598 阅读 · 0 评论 -
职责链设计模式
一、 职责链(Chain of Responsibility)模式责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。从击鼓传花谈起击鼓转载 2007-06-04 11:02:00 · 774 阅读 · 0 评论 -
.NET中的设计模式五:观察者模式
观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。观察者模式有很多实现方式,转载 2007-05-30 13:47:00 · 848 阅读 · 0 评论 -
TreeNode 遍历兄弟节点
要遍历兄弟节点,先要得到它的父节点,然后遍历,当然,也可以使用PreNode和NextNode,两个都要使用,不要只遍历一个方向,忘了另一个方向原创 2007-08-08 10:54:00 · 2276 阅读 · 2 评论 -
设计模式----Factory Method --创建型
从耦合关系谈起– 模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改– 模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其他模块保持不变耦合关系直接决定着软件面对变化时的行为动机(Motivation)在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?如何提供一转载 2007-08-08 00:43:00 · 757 阅读 · 0 评论 -
工厂方法模式(Factory Method Pattern)
一、 工厂方法(Factory Method)模式工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个转载 2007-08-08 00:39:00 · 591 阅读 · 0 评论 -
建造者(Builder)模式
一、 建造者(Builder)模式建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。对象性质的建造有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出转载 2007-08-08 00:10:00 · 701 阅读 · 0 评论 -
设计模式--facade-结构型
如果需求不会变话那么设计模式将会不存在上帝给了人类的一个时间这个概念,让一切都变的。人 :出生,儿童,少年,青年,中年,老年,死亡。接口:接口跟外部交互尽量依赖高层抽象,不要依赖实现细节高层是相对稳定,底层是易碎意图(Intent)为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。——《设计模式》GoF 结构(struct转载 2007-07-30 00:15:00 · 691 阅读 · 0 评论 -
设计模式--bridge--结构型
设计模式的中指就是-- 优先考虑组合,再继承;继承--父类和子类耦合太紧了。桥将一个事物中的多个纬度的变法分离。让他自己变化。这个就是他的中指。bridge 模式 意图(intent)将抽象的部分与实现部分分离,使它们都可以独立的变化。示意图:举例来说假如我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都有同样的类型,面临同样的功能需求变化,比如坦克可能转载 2007-07-30 00:14:00 · 660 阅读 · 0 评论 -
设计模式--proxy--结构
意图(Intent)为其他对象提供一种代理以控制对这个对象的访问。——《设计模式》GoF 结构(structure)直接与间接 人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。上帝创造人类本来很直接,人们很聪明改变这种关系例如一个婴儿要吃苹果转载 2007-07-30 00:31:00 · 719 阅读 · 0 评论 -
设计模式--FlyWeight--结构型
程序员是沟通人和机器交流意图(Intent)运用共享技术有效地支持大量细粒度的对象。——《设计模式》GoF结构(structure)面向对象的代价面向对象很好地解决了系统抽象性的问题,同时在大多数情况下,也不会损及系统的性能。但是,在某些特殊的应用中下,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销。比如图形应用中的图元等对象、字处理应用中的字符对象等。动机转载 2007-07-30 00:29:00 · 660 阅读 · 0 评论 -
合成模式(Composite Pattern)
合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。从和尚的故事谈起这是小时候我奶奶讲的故事:从前有个山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的什么故事呢?从前有个山,山里有个庙……。奶奶的故事要 循环多少次,根据你多长时间睡着而定。在故事中有山、有庙、有和尚、有故转载 2007-07-29 23:58:00 · 658 阅读 · 0 评论 -
设计模式——迭代模式
称 Iterator 结构 意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。转载 2007-04-23 16:46:00 · 708 阅读 · 0 评论 -
定 制 控 件(2)
定制控件示例Visual C#.NET提供了通过“继承”创建功能强大的自定义控件的能力。如果要扩展现有控件的功能,就可以通过继承创建由现有控件导出的控件。通过继承所创建的控件不仅可以保留标准Windows窗体控件的所有固有功能和可视属性,还可以并入自定义功能。下面通过创建从现有Windows窗体控件继承的控件介绍定制控件的一般过程。读者可以自行尝试创建从Control类和UserContr转载 2007-06-18 17:35:00 · 718 阅读 · 0 评论 -
uml使用心得
接触UML差不多一个月了。感觉UML主要的功能是让你能更了解你所设计的系统,同时以面向对象的方法设计此系统。对于工具,用过Rational Rose,Argouml,trufun. Rational Rose用的是2003,是基于UML1.4设计的,所以用不了UML2.0的功能。Rotional Rose也有2005版的。不过好像还没有被破解。Argouml是开源的,用JAVA语言编写的,用起转载 2008-03-03 19:53:00 · 2160 阅读 · 1 评论 -
服务器端软件的一种设计
服务器端软件的复杂度相对比较高。30000多行代码的中间件软件的主线程程序又是怎样的呢? 小鸡射手在实际工作中设计的网络服务的主线程代码如下:IContext& context = ContextManager::GetContext();IEventHandler& handler = EventHandlerManager::GetEventHandler();wh转载 2008-03-11 14:15:00 · 657 阅读 · 0 评论 -
整个项目贯彻面向对象的设计理念
整个项目贯彻面向对象的设计理念。1,面向接口、基类编程。解耦、重用。2,使用分层的设计方案。分层可以有效地实现解耦,可以简化系统的复杂度。3,使用Visitor访问者模式减少类的职责。把数据和操作数据的方法分开到不同的类中,可以有效降低类的复杂度,有利于重用和解耦。转载 2008-03-12 18:43:00 · 978 阅读 · 0 评论 -
PetShop4架构分析(5,6,7)
五 PetShop之业务逻辑层设计业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,我们也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Application转载 2008-03-11 14:07:00 · 946 阅读 · 0 评论 -
校验值对象——应用Visitor模式和反射
概要值对象是一些单一的参数,用来联合一系列的对象——在大多数的情况下,在一个方法调用里有各种各样的参数。这些参数描述了一个大数量级的属性,通常,这些属性需要单独检测,而且大多数情况下是检测其是否为null。通常,这些检测带出来了大量的代码行。这篇文章描述了如何实现基于著名的Visitor模式和反射的值对象。 在业务过程中,你通常有一些属性不能为空,而另外一些则没有这样的要求。在那些必须转载 2008-03-12 20:20:00 · 848 阅读 · 0 评论 -
Visitor 分层 正在考考虑
1,面向接口、基类编程。解耦、重用。2,使用分层的设计方案。分层可以有效地实现解耦,可以简化系统的复杂度。3,使用Visitor访问者模式减少类的职责。把数据和操作数据的方法分开到不同的类中,可以有效降低类的复杂度,有利于重用和解耦。转载 2008-03-12 18:45:00 · 610 阅读 · 0 评论 -
桥接,适配器,代理
适配器模式需要使两个接口不同的对象能够协同工作,因此需要改变对象的接口;而代理模式则需要保证代理与被代理接口一致,代理的对象在于控制被代理对象,被代理对象对客户是不透明的。桥模式和适配器模式,桥是将抽象和实现分离,从而使他们可以分别改变;而适配器则使两个接口不同的对象能够协同工作。原创 2008-03-11 10:53:00 · 722 阅读 · 0 评论 -
数据访问层
数据访问层实现了一个类Database,完成了最基本的数据访问能力,包括以下功能。(1)连接数据库:Open()。(2)根据一个SQL查询字符串,获取一个数据集GetDataSet()。(3)关闭数据库:Close()。其类图如图19.6所示。 为了便于管理工程中的文件,在创建Database类之前,首先在工程中加入一个文件夹DataAccessLayer,用于放置数据访问转载 2008-03-06 23:20:00 · 1023 阅读 · 0 评论 -
页面显示层
在ASP.NET系统中,页面显示层即是ASPX页面的实现。本例中,首先添加一个新的ASPX页面CategoryQuery.aspx,然后在页面上添加以下控件。(1)一个标签,ID默认,Text为“货物编号”。(2)一个输入框,ID为“TextBoxCategoryID”。(3)一个按钮,ID为“ButtonQuery”,Text为 “查询”。(4)一个标签,ID为“Label转载 2008-03-06 23:23:00 · 1157 阅读 · 0 评论 -
.NET中的抽象工厂
我们说过,抽象工厂针对系列产品的应变。在使用ADO.NET进行数据访问的时候,如果目标数据库是Access,我们会使用OleDbConnection、OleDbCommand以及OleDbDataAdapter等一系列ADO.NET对象。那么如果数据库是SQL Server,我们又会改用SqlConnection、SqlCommand以及SqlDataAdapter等一系列ADO.NET对象。如转载 2008-03-07 15:55:00 · 849 阅读 · 0 评论 -
业务逻辑层
在实现了数据访问层的Database类之后,下面来实现业务逻辑层。本例的业务逻辑层只包含一个类Category,它代表了一个货物分类,只有一个方法LoadData(),用于根据分类的编号,获取分类的详细信息;另外具有3个属性,分别代表分类的编号、名称和说明信息。如图19.7所示。图19.7 Category类的类图 同DataAccessLayer相似,也为业务逻辑层新建一个文件转载 2008-03-06 23:21:00 · 1357 阅读 · 0 评论 -
爽哥的代码
interface IQuery { string[] GetAllFileds(); } class A : IQuery { #region IQuery Members public string[] GetAllFileds() { return new string[]原创 2008-03-07 20:29:00 · 975 阅读 · 0 评论 -
无废话C#设计模式之三:Abstract Factory
本系列文章将向大家介绍一下C#的设计模式,此为第三篇文章,相信对大家会有所帮助的。废话不多说,继续来看。 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 场景 还是上次说的那个网络游戏,定下来是一个休闲的FPS游戏。和CS差不多,8到16个玩家在游戏里面分成2组对战射击。现在要实现初始化场景的工作。要呈现一个三维物体一般两个元素是少不了的,一是这转载 2008-03-07 15:54:00 · 653 阅读 · 0 评论 -
各种工厂的论述 区别
简单工厂不在23种设计模式之中,而是被归为工厂方法的一种形式,是参数化的工厂方法。public abstract class Creator{ public abstract Production FactortMethod();}表示工厂方法模式的部分只是FactoryMethod(),如果没有这个方法,则不是工厂方法模式。Creator的职责并非只是创建一个产品,它还经常包含原创 2008-03-03 22:25:00 · 1011 阅读 · 0 评论 -
深入探讨Iterator模式[转载]
java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理。 本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很多泛转载 2007-04-23 16:33:00 · 635 阅读 · 0 评论 -
使用Decorator模式添加功能
使用Decorator模式添加功能 可能你已经在用Decorator模式了,但是跟所有其他模式一样,知道你为什么使用它,学习使用它跟别的开发者沟通是很重要的。 Decorator模式,即Wrapper模式,其强制控制作用是在不改动一个类的代码或者不破坏一个类的接口的情况下为该类添加功能。当你想一个类具有更多功能的时候,使用Decorator模式意味着增加功能后的版本不一定要通过扩展类来重用现有功能转载 2007-04-23 15:57:00 · 550 阅读 · 0 评论 -
Strategy Pattern /Template Method Pattern
现在就来说说策略模式[Stragegy Pattern]/和模板方法模式[Template Method Pattern]: 几个原则:Program to an interface, not an implementation [针对接口编程,而不要针对实现编程] Favor object [aggregation] over class inheritance [优转载 2007-04-19 12:56:00 · 798 阅读 · 0 评论 -
MFC 与 设计模式
设计模式是用来为重复出现的问题提供解决方案。它帮助设计者将系统分解成相互合作的对象集并发现其关系。它为我们提供了一种用来交流设计原则的公共词汇。有两种分类的方法。一种按目的(创造型,结构型,行为型),另一种按作用域(类或对象)。创造型关注对象的创造,结构型关注对象的组成,行为型关注对象的交互和责任的分布。类作用域下的模式关注静态类关系,而对象模式关注动态对象的交互。MFC是C++程序员使用转载 2007-04-12 10:16:00 · 842 阅读 · 0 评论 -
Singleton - 用“静态初始化”在 .NET 中实现 Singleton & 多线程 Singleton
Singleton 模式在很大程度上可以减少使用全局变量带来的危害(很多语言里根本不支持全局变量)。.NET特有的语言特性也对Singleton 进行了相应的增强 1。静态初始化 public sealed class Singleton { private static readonly Singleton instance = new Singleton(); pri转载 2007-07-02 00:38:00 · 780 阅读 · 0 评论 -
追MM与23种设计模式
创建型模式 1、FACTORY—追MM少不然口味有所不同,但不管你麦当劳和肯德基就是生产鸡 了请吃饭了,麦当劳的鸡翅和肯带MM去麦当劳或肯德基,只管向翅的Factory 德基的鸡翅都是MM爱吃的东西,虽服务员说“来四个鸡翅”就行了。转载 2007-06-20 13:19:00 · 717 阅读 · 0 评论 -
LSP简介(LSP--Liskov Substitution Principle)
一、LSP简介(LSP--Liskov Substitution Principle):定义:如果对于类型S的每一个对象o1,都有一个类型T的对象o2,使对于任意用类型T定义的程序P,将o2替换为o1,P的行为保持不变,则称S为T的一个子类型。子类型必须能够替换它的基类型。LSP又称里氏替换原则。对于这个原则,通俗一些的理解就是,父类的方法都要在子类中实现或者重写。转载 2007-06-20 13:14:00 · 6551 阅读 · 0 评论 -
OCP简介(OCP--Open-Closed Principle)
OCP简介(OCP--Open-Closed Principle):Software entities(classes,modules,functions,etc.) should be open for extension, but closed for modification。软件实体应当对扩展开放,对修改关闭,即软件实体应当在不修改(在.Net当中可能通过代理模式来达到这个目的)转载 2007-06-20 13:12:00 · 3401 阅读 · 0 评论 -
Three
1、Design to interfaces. 2、Favor composition over inheritance. 3、Find what varies and encapsulate it.转载 2007-06-20 11:08:00 · 692 阅读 · 0 评论 -
SRP简介(SRP--Single-Responsibility Principle):
就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。 所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化。“就像一个人身兼数职,而这些事情相互关联不大,,甚至有冲突,那他就无法很好的转载 2007-06-20 11:06:00 · 3583 阅读 · 0 评论 -
面向对象设计的基本原则
设计的普遍规律,不只单讲如何设计类,向上到整个组件的设计,向下到类中单个方法的设计 单一职责原则——SRP就一个类而言,应该仅有一个引起它的变化的原因 原则最简单,最单纯的事情最容易控制,最有效类的职责简单而且集中,避免相同的职责分散到不同的类之中,避免一个类承担过多的职责减少类之间的耦合当需求变化时,只修改一个地方组件每个组件集中做好一件事情组件的颗粒度发布的成本转载 2007-06-20 11:05:00 · 728 阅读 · 0 评论