08 2011 档案
摘要:概述: 迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。实用场合: 1.访问一个聚合对象的内容而无需暴露它的内部表示。2.支持对聚合对象的多种遍历。3.为遍历不同的聚合结构提供一个统一的接口(即,多态迭代)。类图: 代码结构示例: ...
阅读全文
摘要:概述: 将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite"使得用户对单个对象和组合对象的使用具有一致性。适用场合: 1.你想用部分-整体结构层次。2.你希望用户忽略组合对象与单个对象的不同,用户将统一的使用组合结构中的所有对象。类图: 代码示例: ...
阅读全文
摘要:概述: 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。应用场合: 1.必须保存一个对象在某一时刻(部分)的状态,这样以后需要时它才能恢复到先前的状态。2.如果用一个接口来让其他对象直接得到这个状态,将会暴露对象的实现细节并破坏对象的封装性。类图: ...
阅读全文
摘要:概述: 适配器模式(atapter)将一个类的接口转换成用户希望的另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。应用场合: 1.你想使用一个已经存在的类,而它的接口不符合你的要求。2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。3.(仅适用于对象adapter),你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹...
阅读全文
摘要:概述: 状态模式(state):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。适用场合: 1.当一个对象的转换条件表达式过于复杂时,通常这个状态由一个或者多个枚举表示,通常有多个操作包含这一相同的的条件结构,state模式将一个条件分支放到一个类中,这使得你可以根据对象自身的情况将对象的状态作为对象,这一对象不依赖于其他对象而独立变化,把状态的判断逻辑放到表示不同状态的一系列类...
阅读全文
摘要:概述: 抽象工厂(abstractFactory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体类适用场合:1.一个系统要独立于它的产品的创建、组合和表示时。2.一个系统要由多个产品系列中的一个来配置时。3.当你强调一系列相关的产品对象的设计以便进行联合使用时。4.当你提供一个产品类库,而只想显示他们的接口而不是实现时。类图: 示例代码: ...
阅读全文
摘要:概述: 观察者模式(Oberserver):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。实用性: 1.当一个对象有两个方面,其中一个方面依赖于另一个方面。将二者封装在独立的对象中以使他们可以各自独立的改变和复用。2.当一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。3.当一个对象必须通知其他对象,而又不能假定其他对象是谁...
阅读全文
摘要:概述: 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用场合: 1.当创建复杂对象的算法应该独立于该对象的组成部分及他们的装配方式时。2.当构造过程必须允许被构造的对象有不同的表示时。类图: 代码结构实例: ...
阅读全文
摘要:概述: 为子系统的一组接口提供一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用应用场合: 1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子类的的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大...
阅读全文
摘要:概述: 模板方法(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤。实用性: 1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。2.各子类中公共的行为应被提取出来并集中到一个公共类中以避免代码重复。 首先识别现有代码的不同之处,并且将不同之处分离为新的操作...
阅读全文
摘要:概述: 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象实用场合: 1.当一个系统应该独立于它的产品创建、构成和表示时。2、当要实例化的类是在运行时刻指定时,例如通过动态装载。3、为了避免创建一个与产品类层次平行的工厂类层次时。4、当一个类的实例只能有几个不同状态组合中的一种时。类图: ...
阅读全文
摘要:概述: 工厂方法(factory method):工厂方法通过一个抽象类实现了所有对产品的加工操作代码,唯独将产品的构建方法写成抽象方法。继承这个抽象类的具体类只重写其构建方法,这样就实现了对于不同被构建产品复用相同的加工操作逻辑。工厂方法适用于需要在子类中才能决定实例化哪个被操作对象,同时这些被操作对象又复用相同操作逻辑的场合。类图: 代码示例: ...
阅读全文
摘要:代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问,简单的来说调用这个类的同时其实里面是别的类在干事。应用有1.远程代理:也就是为一个对象在不同的地址空间提供局部代表,这样可以影藏一个对象存在于不同地址空间的事实,比如.net里的webservice。2.虚拟代理:根据需要将一个资源消耗很大的或者比较复杂的对象延迟到真正需要时才创建,比如延迟加载图片,优先加载文字3.保护代理:控制对一个对象的访问权限,用于对象有权限设置的时候4.智能引用:当调用真实对象时,代理处额外的事情来,提供额外的服务,如计算对象真实的引用次数,这样对象没有引用时可以自动释放它,通过代理访问一个对象时做
阅读全文
摘要:装饰模式:(Decorator),动态地给一个对象添加一些额外的职责,比单纯的继承更为灵活合理,应用场合比如java的System.IO各种输出就是通过装饰模式来实现的,还有一些日志类,动态的添加日志记录的功能,将耦合度降到最低。这里的基本内容参照大话设计模式的,但是这一节将的并不好,再额外做些补充,供自己和园友们做备忘录用。 Componet 是定义一个对象接口,可以给这些对象动态的添加职责, ConcreteComponent是定义了一个具体的对象, 也可以给这些对象添加一些职责。 Decorator,装饰抽象类,继承了Component,从外类来扩展Component的功能,...
阅读全文
摘要:策略模式:Strategy,它定义了算法家族,分别封装起来,让他们之间可以相互替换,让算法的变化不会影响到算法使用者1.定义抽象算法 /// <summary> /// 抽象算法类 /// </summary> abstract class Strategy { /// <summary> /// 算法方法 接口定义 /// </summary> public abstract void AlgorithmInterface(); }2.具体算法的实现 /// <summary> /// 具体算...
阅读全文
摘要:fck神马东西,不解释,很暴力,几乎很难有编辑器再超过它,但是最新版的那个ckeditor,把f去掉后的那个界面实在用不习惯,看的两眼昏花,所以目前做项目还是选择2.6版本的fck吧。但是他的各种漏洞也很让人蛋疼,各种乱码浮云也让人纠结,所以这篇文章就记下来,每次纠结一次记录一次。严重错误更正 我们不能通过HttpPostedFile ofile 取读取文件的路径来判断文件类型,得通过Image.FromStream来读取文件流生成图片,当然如果是非正常图片就会出错了,自然也不会上传上去了。纠结1:找到2.6.6的fck C#源码,看里面的FileWorkerBase 类下的上传代码,感觉写的
阅读全文