结构 说明 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... 阅读全文

最近需要在开发的安卓项目中添加新浪微博一件关注的功能, 本来是一个很简单的功能, 就是调用新浪微博客户端显示用户信息的 Activity , 然后用户就点击关注按钮就可以了。 本来是很简单的功能, 可以网上找到的几乎都是 JS 的代码, 或者是要注册新浪微博 SDK 的代码, 这么简单的功能应该不用注册什么 SDK 的, 也不想参合什么 JS , 只要研究一下新浪微博客户端的 Activity 就可以了。 首先我们需要使用 AXMLPrinter2.jar 反编译新浪微博的 AndroidManifest.xml , 从中查找显示用户信息的页面, 反编译代码如下: java -jar... 阅读全文

ExtJS 是一个非常优秀的 JS 框架, 由于 ExtJS 自身非常庞大, 用于开发测试的 ext-all-debug.js 文件达到了 3.24M , 如果是再加载带注释的 ext-all-debug-w-comments.js 则更是达到了 6M , 可以说是非常庞大了, 因此动态加载 ExtJS 是很有必要的, 接下来就介绍如何对 ExtJS 做动态加载。 创建一个基本的模板 首先需要先创建一个基本可用的 ExtJS 模板, 这个很简单, 如下所示: <!DOCTYPE html> <html> <head> <title&... 阅读全文