设计模式

设计模式是一享元模式和观察者模式等。套被反复使用、为多数人知晓、经过分类编目的、代码设计经验的总结。使用设计模式的目的是为了代码重用,避免程序大量修改,同时使代码更易于理解,并且保证代码可靠性。常见的设计模式有工厂模式、单例模式、适配器模式等。

1、什么是单例模式

      在某些情况下,有些对象只需要一个就可以了,即每个类只需要一个实例,例如一台计算机可以连接多台打印机,但是这个计算机上的程序只能有一个,这里就可以通过单例模式来避免两个打印作业同时输出到打印机上,即在整个打印过程中只有一个打印程序的实例。

      简单来说,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻单例类的实例只存在一个(当然也可以不存在)。

      单例模式确保某一个类只有一个实例,而且自行实例化,并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”需求时才可使用。

      全局变量与单例模式的区别为:首先,全局变量是对一个对象的静态引用,全局变量确实可以提供单例模式实现的全局访问这个功能,但是它并不能保证应用程序中只有一个实例;其次编码规范也明确指出应该要少用全局变量,因为过多使用全局变量会造成代码难读;最后全局变量并不能实现继承。而单例模式在类中保存了它的唯一实例——这个类,它可以保证只能创建一个实例,同时它还提供了一个访问该唯一实例的全局访问点。

2、什么是工厂模式

      工厂模式专门负责实例化有大量公共接口的类。工厂模式可以动态的决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。客户类和工厂类是分开的。消费者无论什么时候需要某种产品,需要做的只是向工厂提出请求即可。消费者无需修改就可以接纳新产品。当然也存在缺点,就是当产品修改时,工厂类也要做相应的修改。

      工厂模式包含以下几种形态:

      1:简单工厂模式:简单工厂模式的工厂类是根据提供给他的参数,返回的是几个可能产品中的一个类的实例,通常情况下,他返回的类都有一个公共的父类和公共的方法。

      2:工厂方法模式:工厂方法模式是类的创建模式,其用意是定义一个创建产品对象的工厂的接口,而将实际创建工作推迟到工厂接口的子类中。它属于简单工厂模式的进一步抽象和推广。多态的使用,使得工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。

      3:抽象工厂模式:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模式,抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方都应当能够接受子类型。因此,实际上系统所需要的仅仅是类型与这些抽象角色相同的一些实例,而不是这些抽象产品的实例。换句话说,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

3、什么是适配器模式

      适配器模式也叫做变压器模式,他是把一个类的接口转换成客户端所期望的另一种接口,从而使本因接口不匹配而无法一起工作的两个类能够一起工作。适配器可以根据所传递的参数返回一个合适的实例给客户端。

      适配器模式主要应用于“望复用一些现存的类,但是接口又与服用环境要求不一致”的情况,在遗留代码复用、类库迁移等方面非常有用。同时,适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,会引起程序的高耦合,所以一般不推荐使用;而对象适配器采用“对象组合”的方式,耦合度低,应用范围更广。

4、什么是观察者模式

      观察者模式(也被称为发布/订阅模式)提供了避免组件之间紧密耦合的另一种方法,它将观察者与被观察者的对象分离开来。在该模式中,一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,他会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关,结果是对象可以相互对话,而不必了解原因。