07 2012 档案

摘要:观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主题对象在状态发生变化时,会通知所有观察者。当一个对象改变需要同时改变其他对象,而且他不知道具体有多少对象需要改变的时候,应该考虑使用观察者模式。观察者结构图: 使用场景:老板回来通知员工需要进入工作状态。定义观察者的抽象类: abstract class Observer { protected string name; protected ISubject sub; public Observer(string name, ISubject sub) { this.name = name; this.sub 阅读全文
posted @ 2012-07-31 09:03 八神吻你 阅读(383) 评论(1) 推荐(0)
摘要:建造者模式:是在当创建复杂对象的算法,应该独立于改对象的组成部分以及它们的装配方式的使用模式,好处是使得建造者代码与表示代码分离。结构图:需要建造的对象(一般是复杂对象): class Product { IList<string> parts = new List<string>(); public void Add(string part) { parts.Add(part); } public void Show() { Console.WriteLine("产品创建"); foreach (string part in parts) { Co 阅读全文
posted @ 2012-07-27 16:02 八神吻你 阅读(264) 评论(0) 推荐(0)
摘要:外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个借口使得这子系统容易使用。1、在设计初期阶段,应该要有意识的将不同的两层分离,比如考虑数据访问层、业务逻辑层、表示层之间建立外观模式,这样可以为子系统提供简单一致的接口,使得耦合大大降低。2、开发阶段,子系统内部由于不够重构变得非常复杂,增加外观模式可以屏蔽这个复杂性,并提供简单的接口。3、维护一个遗留的大型系统,代码不好再维护时,使用外观模式也是不错的选择。看看外观模式的结构图:Facade类定义:可以给高层系统提供简单的接口 class Facade { SubSystemOne one; SubSyste. 阅读全文
posted @ 2012-07-27 15:35 八神吻你 阅读(228) 评论(0) 推荐(0)
摘要:模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是通过把不变行为搬移到父类,去除子类中重复的代码来体现它的优势。模板方法模式提供了一个很好的代码复用的平台。结构图:AbstractClass定义: abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); public void TemplateMethod() { Pr 阅读全文
posted @ 2012-07-26 11:40 八神吻你 阅读(191) 评论(0) 推荐(0)
摘要:原型模式:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象原型模式其实就是一个从一个对象再创建另一个可定制的对象,而且不需要知道任何创建细节,NET在System命名空间下,提供了ICloneable接口,实现这个接口完成原型模式。一般在初始化信息不变的时候,克隆是最好的办法。隐藏了创建对象的细节,性能也大大提高。MemberWiseClone(),复制仅仅对线程栈进行复制,是属于浅复制,要深复制,需要稍微修改代码。 一般人的简历是不变,需要多份,这个时候使用克隆模式比较好:简历类: class Resume : ICloneable { private string name; 阅读全文
posted @ 2012-07-26 11:20 八神吻你 阅读(316) 评论(0) 推荐(0)
摘要:工厂方法模式VS简单工厂模式简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类对于客户端来说,去除了与具体产品的依赖。工厂方法模式:定义了一个用于创建对象接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式实现时,客户端需要决定实例化哪一个工厂类来实现运算类,选择判断的问题还是存在,也就是说,工厂方法把简单工厂内容判断移到了客户端来判断。简单工厂主要的缺点是违背的开放-封闭原则。工厂方法模式结构图:调用模式的客户端代码: class Program { static void Main(string[] args) { C 阅读全文
posted @ 2012-07-23 09:23 八神吻你 阅读(2001) 评论(1) 推荐(0)
摘要:代理模式:为其他对象提供一种代理以控制其他对象的访问。代理模式的应用:远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。安全代理,用来控制真实对象的访问权限。智能代理,当调用代理时,可以代理处理一些额外的功能。案例场景: 向一位自己心仪的女孩表达爱意,一般我们有两种选择:亲自出马(有自信的人)和 使用‘媒婆’(比较害羞)。其中使用‘媒婆’就是代理行为,我们实现如下:调用代理模式的主函数: class Program { static void Main(string[] 阅读全文
posted @ 2012-07-20 08:49 八神吻你 阅读(648) 评论(0) 推荐(1)
摘要:装饰者模式需要把所需的功能按照正确的顺序串联起来进行控制,动态的给一个对象添加一些额外的职责。装饰模式是利用SetComponent来对对象进行包装的,每一个装饰对象只需关心自己的功能,不需要关心如何被添加到对象链中。装饰模式是为已有功能动态添加其他功能的一种方式,优点是把类中的装饰功能从类中搬移,简化原有类,有效的把核心职责和装饰职责功能区分开来。调用装饰模式的主函数: static void Main(string[] args) { ConcreteComponent c = new ConcreteComponent();//核心功能类 ConcreteDecoratorA d1 = 阅读全文
posted @ 2012-07-19 09:28 八神吻你 阅读(676) 评论(0) 推荐(0)
摘要:设计模式中遵循的原则:单一职责、开放-封闭、依赖倒转单一职责原则一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的功能。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,如果你能够想到多于一个动机去改变一个类,那么这个类就具有多个职责,这时就应该考虑类的职责分离。开放-封闭原则软件实体(类,模块)应该可以扩展,但是不可以修改。对于扩展是开发的,对于修改是封闭的。无论模块多么的‘封闭’,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭作出 阅读全文
posted @ 2012-07-18 08:59 八神吻你 阅读(624) 评论(0) 推荐(0)
摘要:商场促销活动:打折、满额返现等等主函数对工厂模式和策略模式结合的调用: class Program { static void Main(string[] args) { //简单工厂模式 CashSuper csuper = CashFactory.CreateCashAccept("打8折"); float re = csuper.AcceptCash(100); //策略模式与简单工厂结合用法 CashContext csup = new CashContext("打8折"); float re1 = csup.GetResult(100); Co 阅读全文
posted @ 2012-07-17 09:58 八神吻你 阅读(705) 评论(0) 推荐(0)
摘要:HttpModule 使用ASP.NET运行时在创建HttpApplication后,HttpApplication会根据它的Web.Config创建HttpModule,在创建HttpModule时,HttpApplication将调用HttpModule的Init方法。在Init方法中,可以订阅多种HttpApplication事件,最常见是BeginRequest和EndRequest事件,它们是Http执行管线中的第一个和最后一个事件。二级域名Cookie处理(所有以.cnblog.cn结尾的,共享Cookie资源)先建一个类继承IHttpModule接口:public class C 阅读全文
posted @ 2012-07-11 16:25 八神吻你 阅读(2355) 评论(6) 推荐(1)
摘要:ASP.NET页面错误处理ASP.NET应用可以再代码中利用异常捕获来处理错误(try、catch)但是应用出现的所有错误,都用异常捕获来处理是一种不良的编程习惯。try、catch使用简单,但是过度使用会导致严重的性能损失。如果能检测可能出现不预期情况,应该尽量使用其他方法,而将异常捕获作为最后考虑的手段,异常捕获是NET官方提供应用程序处理工具。如果ASP.NET应用程序出现异常,运行时会试图寻找有意捕获它的代码块,异常会在栈中下上遍历,直到抵达当前应用程序的起始层,如果在这期间没有找到合适的处理程序,该异常便成为未处理异常,并使CLR抛出系统异常,用户会看见报黄页,应用程序也会随即终止。 阅读全文
posted @ 2012-07-03 11:08 八神吻你 阅读(10784) 评论(0) 推荐(1)