摘要:
原型模式:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象原型模式其实就是一个从一个对象再创建另一个可定制的对象,而且不需要知道任何创建细节,NET在System命名空间下,提供了ICloneable接口,实现这个接口完成原型模式。一般在初始化信息不变的时候,克隆是最好的办法。隐藏了创建对象的细节,性能也大大提高。MemberWiseClone(),复制仅仅对线程栈进行复制,是属于浅复制,要深复制,需要稍微修改代码。 一般人的简历是不变,需要多份,这个时候使用克隆模式比较好:简历类: class Resume : ICloneable { private string name; 阅读全文
摘要:
工厂方法模式VS简单工厂模式简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类对于客户端来说,去除了与具体产品的依赖。工厂方法模式:定义了一个用于创建对象接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式实现时,客户端需要决定实例化哪一个工厂类来实现运算类,选择判断的问题还是存在,也就是说,工厂方法把简单工厂内容判断移到了客户端来判断。简单工厂主要的缺点是违背的开放-封闭原则。工厂方法模式结构图:调用模式的客户端代码: class Program { static void Main(string[] args) { C 阅读全文
摘要:
代理模式:为其他对象提供一种代理以控制其他对象的访问。代理模式的应用:远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。安全代理,用来控制真实对象的访问权限。智能代理,当调用代理时,可以代理处理一些额外的功能。案例场景: 向一位自己心仪的女孩表达爱意,一般我们有两种选择:亲自出马(有自信的人)和 使用‘媒婆’(比较害羞)。其中使用‘媒婆’就是代理行为,我们实现如下:调用代理模式的主函数: class Program { static void Main(string[] 阅读全文
摘要:
装饰者模式需要把所需的功能按照正确的顺序串联起来进行控制,动态的给一个对象添加一些额外的职责。装饰模式是利用SetComponent来对对象进行包装的,每一个装饰对象只需关心自己的功能,不需要关心如何被添加到对象链中。装饰模式是为已有功能动态添加其他功能的一种方式,优点是把类中的装饰功能从类中搬移,简化原有类,有效的把核心职责和装饰职责功能区分开来。调用装饰模式的主函数: static void Main(string[] args) { ConcreteComponent c = new ConcreteComponent();//核心功能类 ConcreteDecoratorA d1 = 阅读全文
摘要:
设计模式中遵循的原则:单一职责、开放-封闭、依赖倒转单一职责原则一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的功能。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,如果你能够想到多于一个动机去改变一个类,那么这个类就具有多个职责,这时就应该考虑类的职责分离。开放-封闭原则软件实体(类,模块)应该可以扩展,但是不可以修改。对于扩展是开发的,对于修改是封闭的。无论模块多么的‘封闭’,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭作出 阅读全文
摘要:
商场促销活动:打折、满额返现等等主函数对工厂模式和策略模式结合的调用: 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 阅读全文
摘要:
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 阅读全文
摘要:
ASP.NET页面错误处理ASP.NET应用可以再代码中利用异常捕获来处理错误(try、catch)但是应用出现的所有错误,都用异常捕获来处理是一种不良的编程习惯。try、catch使用简单,但是过度使用会导致严重的性能损失。如果能检测可能出现不预期情况,应该尽量使用其他方法,而将异常捕获作为最后考虑的手段,异常捕获是NET官方提供应用程序处理工具。如果ASP.NET应用程序出现异常,运行时会试图寻找有意捕获它的代码块,异常会在栈中下上遍历,直到抵达当前应用程序的起始层,如果在这期间没有找到合适的处理程序,该异常便成为未处理异常,并使CLR抛出系统异常,用户会看见报黄页,应用程序也会随即终止。 阅读全文
摘要:
HttpRuntime类页面请求先给可以处理原始HTTP请求的对象处理,最后在管线的终端生成要发给浏览器的标记。HttpRuntime类是改管道的入口点。对每一个请求,ASP.NET会创建HttpRuntime对象,并调用ProcessRequest来激活该HTTP管道。HttpRuntime对象会在创建时对许多辅助处理页面请求的内部对象进行初始化。ProcessRequest方法被调用后,会创建HttpContext类实例,他封装了所有的HTTP提有的信息,我们一般在代码中使用就是这个HttpContext对象,他就是由HttpRuntime对象创建的。HttpRuntime对象使用请求信息 阅读全文
摘要:
ASP.NET页面会在第一次请求时动态编译。ASP.NET中的很多文件类型都有动态编译的特性。 运行时管道负责处理输入的HTTP数据包,并转化成服务器端得ASP.NET中的对象,一个系统Page类的派生类。ASP.NET中HTTP运行库会处理页面实类,并相应请求。处理页面代码的 若干事件标志着相应序列的各个生成阶段,整个过程称为“页面的生命周期”。ASP.NET中的页面是怎么转化为类并编译为程序集的?1、页面文件会被解析,从Page类派生出相应的实例。 2、对应的实例会被编译成程序集,并缓存到ASP.NET专用的临时目录中。 3、页面文件没有改动,程序没有重启,Bin文件夹没有改动,已编译的页 阅读全文
摘要:
基于http事件驱动编程 应用程序的状态包括两种信息:客户端状态和会话状态。 客户端状态主要指用户在页面上输入的内容,在服务器端可以很容易获取。 会话状态:http是无状态协议,所以一般使用Cookie完成会话状态。http协议:超文本传输协议(Hypertext Transfer Protocol)是一种基于文本的协议,它定义了web游览器和wen服务器的通信方式。http数据包通过指向目标ip地址的80端口(默认)使用“传输控制协议”(TCP)进行传输。http请求:当我们在浏览器中访问一个URL时,它通过可用的“域名系统”DNS将我们所提供的URL的服务器名转化成一个IP地址,接下来浏览 阅读全文
摘要:
表的简单设计 Product表:ID,Product信息等等。Product表:记录商品信息,ID是主键标识。LocationList表:ID,PageType,Position,等等。LocationList表:每条记录表示着一个类型页面的推荐位,类如:首页,大、中、小类页面,上面都有:新品、促销、热卖等推荐位。 PageType记录着页面类型:首页、大、中、小类页面可以用(0,1,2,3)代表。 Position记录着页面上的位置:新品、促销、热卖等,可以用(10,20,30)代表。 OnlistProductList表:ProductID,LocationID,PageID等等。Onli 阅读全文
摘要:
逻辑查询处理的各个阶段一个普通格式的查询(5)SELECT DISTINCT TOP N <SELECTLIST>(1)FROM <LEFTTB> JOIN <RIGHTTB> ON <ONPRE>(2)WHERE <WHEREPRE>(3)GROUP BY <SPECIFICATION>(4)HA 阅读全文
摘要:
市面上有很多表单验证的框架,教我们怎么验证表单的数据提交,说实话也真的很简单,但是我们会有一种感觉我们要是离开了这些框架的时候,我们有时候会束手无策,然后js验证写的很不规范,没有一套比较好的模式,那我写这篇的目的就是:我们自己构建js验证应该是什么样子的,来慢慢看一下。假设我们现在写一个登录的页面(这可能是最简单的数据提交了哦),html页面会有一个用户名和一个密码的文本框让我们用户输入自己的用户名和密码,我们肯定是要判断用户名和密码是否为空,很明显这样的js验证判断是放在onblur事件里面触发,html代码如下:View Code <li><labelfor=" 阅读全文
摘要:
当我们新建一个ASP.NET的应用程序时,会默认生成一个Default.aspx和Default.aspx.cs页面。在Default.aspx的页面中第一行是一条页面指令:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AspxEventsModel._Default" %>其中CodeBehind属性指定代码隐藏页面的名称,Inherits指定所属的命名空间和类,AutoEven 阅读全文