摘要:Gof定义为其他对象提供一种代理以控制对这个对象的访问。动机在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。看下结构图:Subject:该类中定义了一些RealSubject和Proxy中共有的方法。RealSubject:这个类是Proxy所要代理的实体类,客户端只和Proxy交互。代码实现:/// <summary>/// 公共接口/// </summar
阅读全文
摘要:Gof定义运用共享技术有效地支持大量细粒度的对象。动机采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?这需要用到享元模式,不过应用享元模式是需要进行评估的,也就是说在当前情况下是否会对系统造成性能上的影响,如果会那么就是用,下面先来看个小例子是如何进行评估的。假设有一个字符的类Charator,如下:public class Charator{ char c; Font f;}为了方便评估,Charator类中的Font...
阅读全文
摘要:My97相信大家都不陌生,应该是我所见过的最强大的一个日历控件了,最近的项目中也比较多地用到了此控件,而且项目中经常会有不同时间范围的需求,在此列出一些比较常用的日期范围格式的设置,尽管在My97的官方文档中有很详细的介绍,正是因为很详细所以查找起来不是很方便。1 可以选择任何日期<input id="txtDate" class="Wdate" type="text" onfocus="WdatePicker()" />2 今天以前的日期<input type="text"
阅读全文
摘要:Gof定义为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。先来看个小例子,假设我们需要开发一个坦克模拟系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎、控制器、车轮、车身等各子系统构成。就会有下面这些类的产生public class Wheel{ }public class Engine{ }public class Controller{ }public class BodyWork{ }不同的场景中的要求都不一样,可能会用到某些子系统,也可能不会用到,这些不同的场景就相当是外部接口,这些场景和子系统的关系
阅读全文
摘要:Gof定义动态地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。首先来看一个小例子,假如我们需要给游戏开发一种坦克,除了各种不同型号的坦克外,还希望在不同的场合来给坦克增加以下的一种或多种功能:比如红外线夜视功能、水陆两栖功能、GPS定位功能等。通常做法如下:/// <summary>/// 抽象坦克/// </summary>public abstract class Tank{ public abstract void Shot(); public abstract void Run();}//型号public class T
阅读全文
摘要:Gof定义将对象组合成树形结构以表示“部分--整体”的层次结构。Composite使得用户对单个对象和组合对象使用具有一致性。在面向对象系统中,我们经常会遇到一类具有”容器“特征的对象---即他们在充当对象的同时,又是其他对象的容器。比如在一些管理系统中就会出现总公司下面有很多的分公司,分公司下面有很多的部门,每个部门下又有很多的员工,像分公司和部门就是既充当了“对象”的角色也充当了“容器”的角色;还有我们可能玩过的“俄罗斯套娃”也是这种结构,一个大娃娃里面装个小娃娃,小的里面又有个小的直到最小的一个,中间的娃娃就是既充当了“对象”也充当了“容器”。先看下面这个例子:interface IBo
阅读全文
摘要:Gof定义将抽象部分与实现部分分离,使他们都可以独立地变化。先来看一个简单的例子,假设我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上的功能都一样,有同样的类型,有同样的功能需求变化,而这些游戏中的坦克有多种不同的型号:T50 T60等。根据面向对象的思想,我们可以很容易设计一个坦克(Tank)的抽象类,然后不同的型号都继承抽象类,并且PC和手机上的图形绘制,操作等都是不相同的,所以不同的平台都要提供自己的一套实现:坦克抽象类/// <summary>/// 坦克的抽象类/// </summary>public abstract class Tank{
阅读全文
摘要:Gof定义将一个类的接口转换成客户所希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。动机在软件系统中,由于应用环境的变化,常常要将“一些现存的对象”放在心的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。适配的意思是在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。在我们的生活中有着很多适配器的例子,笔记本的电源适配器、一些卡的USB读卡器等等。在Gof23这本书中将适配器模式分成了两种:对象适配器和类适配器对象适配器上图中的Target是客户所期待的,希望去使用的类或接口。Adaptee是被适配的对象。Adapter为适配的对象。首
阅读全文
摘要:Gof定义使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。动机在软件系统中,经常面临着“某些结构复杂的对象”的创建工作,但由于需求的变化,这些对象将成面临着剧烈的变化,但他们拥有比较稳定一致的接口。假设在一些打斗游戏场景中,有这样一些角色,普通(NormalActor),可以飞的(FlyActor),可以潜水的(WaterActor)public abstract class NormalActor { }public abstract class FlyActor { }public abstract class WaterActor { }上面的三个类都是抽象类,自然会
阅读全文
摘要:Gof定义定义一种用于创建对象的借口,让子类决定实例化哪一个类,Factory Method使得一个类的实例化延迟到子类。动机在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的借口。假设有这样的一个场景,有一个汽车类和一个汽车测试框架类,汽车测试框架负责对汽车来进行测试,通常情况下我们会想下面这样写。public class Car{ public void Startup() { } public void Run(){ } public void Turn(Direction direction) { } ...
阅读全文
摘要:Gof定义将一个复杂对象的构建与其表示相分离,使其同样的构建过程可以创建不同的表示。动机在软件系统中,有时侯面临着一个复杂对象的创建工作,这个发展对象通常是由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分经常面临着巨大的变化,但是将他们组合起来的算法相对稳定。还是拿游戏中的房屋作为例子来讲,房屋由门、窗户、墙、地板、天花板组成。这些组成部分可能是经常要发生变化的。如果按常规设计,这些组成部分中的任何一个发生变化时都将使房屋重建,生成器模式的作用就是要使这些组件的变化不影响到房屋。首先构建一个House类public abstract class House{ ...
阅读全文
摘要:Gof定义提供一个借口,让该接口负责创建一系列相关或者相互依赖的对象,无需指定他们具体的类。动机在软件系统中经常面临着一系列相互依赖的对象的创建的工作,同时由于需求的变化,往往存在着更对系列对象的创建。常规的对象创建的方法,直接使用new关键字Road road = new Road();这样直接new会有一个问题,不能应对具体实例化类型的变化,比如说有不同的Road类型需要被实例化的时候就需要来更改此处的代码。解决这个问题的办法就是封装变化点,变化点也是相对而言的,比如在项目中有些地方会经常更具客户的需求而作改动,我们就可以将其封装起来。拿上面的那行代码来说,因为可能有不同类型的Road需要
阅读全文
摘要:Gof 定义保证一个类仅有一个实例,并提供一个该实例的全局访问点动机保证在系统中只存在一个实例,这样才能保证逻辑的正确性和良好的效率单件模式单线程环境下实现看下面一段代码:public class Singleton{ private static Singleton _instance; //定义为私有,让类的使用者不能直接new一个该类的实例 private Singleton() { } public static Singleton Instance { get { if (_instance == nul...
阅读全文
摘要:概念设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。面向对象的设计模式描述了面向对象设计过程中,在特定场景下类与相互通讯的对象之间常见的组织关系。设计模式与面向对象面向对象设计模式解决的是“类与相互通信的对象之间的组织关系。包括他们的角色、职责、协作方式几个方面。面向对象设计模式是“好的面向对象设计”,所谓“好的面向对象设计”是那些可以满足“因对变化,提高复用的设计”。面向对象设计模式描述的是软件设计,因此他是独立于编程语言的,但是面向对象设计模式的最终实现仍然要使用面向对象编程语言来表达。面向对象设计模式不像算法技巧,可以照搬照用,他是建立在对“面象对象”纯熟、深入的理解的基础
阅读全文
摘要:Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示。不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中的使用,您也可以点击下面的链接进行演示或下载。官方下载官方文档官方演示首先按下面的步骤来实现一个简单的上传功能。1 创建Web项目,命名为JQueryUploadDemo,从官网上下载最新的版本解压后添加到项目中。2 在项目中添加UploadHandler.ashx文件用来处理文件的上传。3 在项目中添加UploadFile文件夹,用来存放上传的文件。进行完上面三步后项目的基本结构如下图:4 Default.aspx的html页的代码
阅读全文
摘要:数据库中查询后的结果为: col1 col2 col3 col4 AAAA AA 扬州 10.50 AAAA AA 北京 150.00 AAAA BB 南京 20.00 BBBB QQ 北京 50.00 BBBB PP 上海 45.00 BBBB PP 南京 100.00 怎么才能转换成下面这种格式: 扬州 南京 北京 上海 AAAA AA 10.50 150.00 AAAA BB 20.00 BBBB QQ 50.00 BBBB PP 100.00 45.00方法一:DataTable rs1=GetTable( "Select col1,col2 From TabName Gro
阅读全文
摘要:<input id="checkAll" onclick="selectAll()" type="checkbox" /> <script type="text/javascript"> function selectAll() { for(var i=0;i<document.getElementById("CheckBoxList1").getElementsByTagName("input").length;i++) { var IsChe
阅读全文
摘要://给CheckBoxList添加alt属性 foreach (ListItem li in this.cblNeedTestRoom.Items) { li.Attributes.Add("alt", li.Value); }functionGetCheckBoxListValue(){varvaluelist="";//保存checkbox选中值//遍历name以cblNeedTestRoom开头的checkbox$("input[name^='cblNeedTestRoom']").each(function()
阅读全文
摘要:asp.net Web项目中c#读取域用户名的方法BS的内部管理系统,因对方公司采用域管理,所以希望系统根据已登录windows的域用户自动登录。为了这个还真费了不少精力,因我公司没有域服务器,所以临时建了一个,(顺便一提Windows Server 2003的域服务器可以随时建立,不用跟Windows 2000一样在安装的选择成域服务器,早知这样我就不用格式化系统了,-_-|||)网上查了很多资料,再经实践终于得出了一种方法,其实很多网上写的方法都可以,但只是点了一下,有些地方说得不够明白。完成后做个总结备忘,以备后用:(一)环境要求:IIS服务器必须在域中,应该是在域用户下安装的IIS,我
阅读全文
摘要:getCon(); //连接数据库的方法intid=35;SqlParameter[]par=newSqlParameter[2];par[0]=newSqlParameter("@id",SqlDbType.Int);par[0].Value=id;par[1]=newSqlParameter("@count",SqlDbType.Int);par[1].Direction=ParameterDirection.Output; //设置为输出参数SqlHelper.ExecuteNonQuery(con,CommandType.StoredProced
阅读全文