设计模式

  • Published on
    当创建给定类的实例的过程很昂贵或者很复杂时,就使用原型模式。通过创建类实例对应的 prototype 原型,后续创建类实例就直接调用原型实例的 clone 函数,从原型实例自身拷贝一个实例返回。原型模式是基于从零创建一个对象的成本(复杂程度)远高于直接拷贝对象的成本。
  • Published on
    怎样创建一个唯一的变量(对象)?面向过程编程中可以创建一个全局变量(对象),纯粹面向对象中,可能只能通过 Singleton 模式来实现。
  • Published on
    当一个抽象有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不同方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。
  • Published on
    Decorator 模式除了采用组合的方式取得了比采用继承方式更好的效果,Decorator 模式还给设计带来一种“即用即付”的方式来添加职责。在OO设计和分析中经常有这样一种情况:为了多态,通过父类指针指向其具体子类,但是这就带来另外一个问题,当具体子类要添加新的职责,就必须向其父类添加一个这个职责的接口,否则通过父类指针是调用不到这个方法的。这样处于高层的父类就承载了太多的特征(方法),并且继承自这个父类的所有子类都不可避免继承了父类的这些接口,但是可能这并不是这个具体子类所需要的。而 Decorator 模式则提供了一种较好的解决方法,当需要添加一个操作的时候就可以通过 Decorator 模式来解决,你可以一步步添加新的职责。
  • Published on
    享元模式与简单工厂模式有点像,都用到了工厂的概念。其实享元模式里面就是用到了简单工厂模式来管理细粒度对象。享元模式解决的问题是对象的共享,而工厂模式解决的问题是如何封装对象的创建过程。明白它们两解决的问题,就知道它们是两种完全不一样的模式。但是它们却可以完美地结合在一起,协同解决问题。
  • Published on
    Proxy 提供的接口(方法、函数)与实体同名,是一致的,而 Adapter 与 Adaptee 的接口(方法、函数)名称可能不同。适配器模式与代理模式最大的不同还是在于他们的出发点(初心)不同,适配器模式是为了做兼容,而代理模式的核心是为了增加功能。当然适配器在做适配的时候,也可以增加功能,这样它就跟代理模式非常接近了。
  • Published on
    命令模式的类图和适配器模式的类图很像,它们做的事情都是制造了一个中间层, 提供给系统统一的调用接口,封装了真正干活的实体。它们的差异还是在于使用意图,命令模式是为了命令的复用和灵活切换,而适配器模式是为了在新旧接口之间做兼容。
  • Published on
    给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。所谓的领域专用语言指的就是这种在某些领域使用的比较专业性的程序语言,为了实现这种语言,通常抽象一个解释器类去解析这种语言。
  • Published on
    用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散而且可以独立地改变它们之间的交互。
  • Published on
    策略模式抽象出了一个 Strategy 类作为中间层,系统不直接访问某一个具体的算法,而是通过访问 Strategy 抽象类来调用算法,这样可以动态地在运行时切换算法。
  • Published on
    可以看到 Strategy 模式和 Template 模式解决了类似的问题,但是 Strategy 模式是将逻辑(算法)封装到一个类,并采取组合(委托)的方式解决这个问题,而 Template 是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。Strategy 和 Tmeplate 模式实际是实现一个抽象接口的两种方式:继承和组合之间的区别。要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类。