结构 说明 Provide a surrogate or placeholder for another object to control access to it. 为其他对象提供一个代理以控制对这个对象的访问。 适用条件 远程代理: 为一个对象在不同的地址空间提供局部代表; 虚代理: 根据需要创建开销很大的对象; 保护代理: 控制对原始对象的访问; 智能指引: 取代了简单的指针, 并在访问对象时执行一些附加操作。 实现 public interface IImage { void DisplayImage(); } public c... 阅读全文

结构 说明 Use sharing to support large numbers of similar objects efficiently. 通过共享以便有效的支持大量小颗粒对象。 适用条件 一个程序使用了大量的对象; 完全由于使用大量的对象, 造成了很大的存储开销; 对象的大多数状态都可以变为外部状态; 如果删除对象的外部状态, 那么可以使用相对较少的共享对象取代很多组对象; 应用程序不依赖于对象标识, 由于享元对象可以被共享, 所以概念上明显有别的对象, 标识测试将返回真值; 实现 public interface ICoffeeOr... 阅读全文

结构 说明 Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use. 为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 适用条件 为一个比较复杂的子系统提供一个简单的接口; 将客户程序与子系统的实现部分分离, 提高子系统的独立性和可移植性; 简化子系统间的依赖关系。 ... 阅读全文

结构 说明 Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality. 向某个对象动态地添加更多的功能。修饰模式是除类继承外另一种扩展功能的方法。 适用条件 在不影响其他对象的情况下, 以动态且透明的方式添加单个对象的功能; 处理那些可以撤销的功能; 不能采用生成子类的方法扩充... 阅读全文

结构 说明 Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. 把多个对象组成树状结构来表示局部与整体,这样用户可以一样的对待单个对象和对象的组合。 适用条件 四则运算、逻辑运算以及 SQL 语句等都可以用组合模式表示; 命令: 一个命令经常可以有若干个子命令表示; 事务: 最典型的事务时测试用... 阅读全文

结构 说明 Decouple an abstraction from its implementation allowing the two to vary independently. 将一个抽象与实现解耦,以便两者可以独立的变化。 适用条件 不希望在业务和业务的具体实现之间存在固定的绑定关系; 希望类的抽象和实现部分可以扩充, 进而实现不同的抽象接口和实现部分的组合; 复用实现部分。 实现 interface IDrawingApi { void DrawCircle(double x, double y, double radius); ... 阅读全文

结构 说明 Convert the interface of a class into another interface clients expect. An adapter lets classes work together that could not otherwise because of incompatible interfaces. 将某个类的接口转换成客户端期望的另一个接口表示。适配器模式可以消除由于接口不匹配所造成的类兼容性问题。 适用条件 需要使用一个已经存在的类, 但接口与设计要求不符; 需要创建一个可复用的类, 该类可以与其它不相干的类... 阅读全文

结构 说明 Ensure a class has only one instance, and provide a global point of access to it. 确保一个类只有一个实例,并提供对该实例的全局访问。 适用条件 当类只能有一个实例存在, 并且可以在全局进行访问时, 这个唯一的实例应该可以通过子类实现扩展, 并且用户无需更改代码即可使用。 实现 public class DoublecheckSingleton { private volatile static DoublecheckSingleton _instance; pr... 阅读全文

结构 说明 Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 适用条件 原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。 实现 abstract class Prototype : ICloneable { public ... 阅读全文

结构 说明 Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses . 定义一个接口用于创建对象,但是让子类决定初始化哪个类。工厂方法把一个类的初始化下放到子类。 适用条件 当一个类不知道它所必须创建对象的类或一个类希望由子类指定它所创建的对象时, 可以采用工厂方法。 实现 abstract class Maz... 阅读全文

Xcode 升级到 5 之后, iOS 的 xib 文件发生了变化, 导致 Xamarin Studio 中自带的 iOS ViewController 模板出错了, 本文分析发生的错误, 并给出对应的解决方法。 旧的 xib 文件的代码是这样子的: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4469" systemVersi... 阅读全文

iOS 升级到 7.1 之后, 原来通过网页分发应用的方法出现错误, 提示 “无法安装应用, 服务器证书无效”, 原来 iOS 要求必需将 plist 文件放到 https 服务器上 (对 ipa 文件无要求), 在 StackOverFlow 上有网友将 plist 文件放到 dropbox 或者 skydrive 上的方法, 国内也可以将 plist 文件放到 SAE (Sina App Engine) 上面经测试是可行的。 不过如果是通过内网分发 iOS 应用的话, 修改起来还是挺麻烦的, 最好还是使用自签名的证书实现 https 链接, 这样对内网分发应用方式的修改最小。 使用... 阅读全文