结构 说明 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 链接, 这样对内网分发应用方式的修改最小。 使用... 阅读全文

Storyboard 的优点: 可视化; XamarinStudio 自带 Storyboard 编辑器, 不用启动 Xcode 。 Storyboard 的缺点: 只有一个文件, 不利于多人同时编辑; 在 MvvmCross 不推荐使用 UIStoryboardSegue , 因为和 Mvx 的 Command 功能上冲突, 这里以 Mvx 为主。 可能是因为上面的缺点吧, Mvx 没有提供内置的 Storyboard 支持。 不过 Mvx 的扩展性是很强大的, 通过自定义 MvxTouchViewsContainer 就可以实现对 Storyboa... 阅读全文

结构 说明 Separate the construction of a complex object from its representation allowing the same construction process to create various representations. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 适用条件 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时; 当构造过程必须允许被构造的对象有不同的表示时。 实现 abstract class PizzaBuilder... 阅读全文

Git 每次进行 Pull 和 Push 操作时都要输入用户名和密码, 非常不便。 虽然有客户端 SmartGit/HG 以及 TortiseGig 可以帮你记一下客户端, 但是每个代码库都要记录一次, 如果项目包含很多个 submodule 的话, 用起来也有些不方便。 经过一番搜索, 最终找到了让 git 客户端记住密码的方法, 现总结如下: Linux/Unix/Mac 系统 新建一个 ~/.netrc 文件, 将 git 服务器, 用户名以及密码记录在这个文件, 如下所示: machine your-git-server login your-username passwo... 阅读全文

本博客基于 Tabler CSS 框架, 采用 Jekyll 模板引擎, 使用 Markdown 语法编写。

博客源代码及文章内容采用 AS-IS 协议发布,转载时请 AS-IS 。