设计模式
简述一下你了解的设计模式。
所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经
过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他
人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计
和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解
其设计思路。
在 GoF 的《Design Patterns: Elements of Reusable Object-Oriented
Software》中给出了三类(创建型[对类的实例化过程的抽象化]、结构型[描述如
何将类或对象结合在一起形成更大的结构]、行为型[对在不同的对象之间划分责任
和算法的抽象化])共 23 种设计模式,包括:Abstract Factory(抽象工厂模式),
Builder(建造者模式),Factory Method(工厂方法模式),Prototype(原始
模型模式),Singleton(单例模式);Facade(门面模式),Adapter(适配器
模式),Bridge(桥梁模式),Composite(合成模式),Decorator(装饰模
式),Flyweight(享元模式),Proxy(代理模式);Command(命令模式),
Interpreter(解释器模式),Visitor(访问者模式),Iterator(迭代子模式),
Mediator(调停者模式),Memento(备忘录模式),Observer(观察者模式),
State(状态模式),Strategy(策略模式),Template Method(模板方法模式),
Chain Of Responsibility(责任链模式)。
面试被问到关于设计模式的知识时,可以拣最常用的作答,例如:
工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类有一个公
共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同
的操作(多态方法)。当得到子类的实例后,开发人员可以调用基类中的方法而
不必考虑到底返回的是哪一个子类的实例。
代理模式:给一个对象提供一个代理对象,并由代理对象控制原对象的引
用。实际开发中,按照使用目的的不同,代理可以分为:远程代理、虚拟代理、
保护代理、Cache 代理、防火墙代理、同步化代理、智能引用代理。
适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使
原本因接口不匹配而无法在一起使用的类能够一起工作。
模板方法模式:提供一个抽象类,将部分逻辑以具体方法或构造器的形式
实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不
同的方式实现这些抽象方法(多态实现),从而实现不同的业务逻辑。
除此之外,还可以讲讲上面提到的门面模式、桥梁模式、单例模式、装潢模式
(Collections 工具类和 I/O 系统中都使用装潢模式)等,反正基本原则就是拣
自己最熟悉的、用得最多的作答,以免言多必失。
手写一个单例模式?