适配器模式
两个不兼容接口之间的桥梁,结合两个接口的功能,使不兼容的接口可以一起工作,主要解决运行中项目的问题
例子:读卡器是内存卡和电脑之间的适配器,美国电压100V,中国电压220V,需要一个适配器进行转换
优点:可以让两个没有关联的类一起运行,提高类的复用,增加类的透明度,灵活性好
缺点:使用过多会使系统零乱
桥接模式
把抽象化与实现化解耦,使得二者可以独立变化,提供抽象化和实现化之间的桥接结构,实现解耦
将抽象部分与实现部分分离,使得他们可以独立变化
例子:墙上的开关,看到的开关是抽象的,不用管怎么实现的,一个类存在两个独立变化的维度,且这两个维度都需要拓展
优点:抽象和实现分离,优秀的拓展能力,实现细节对客户透明
缺点:增加系统的理解与设计难度
组合模式
将一组相识的对象组合成树形结构,当做单一的对象,使得可以像处理简单元素一样处理复杂元素
例子:树形菜单,文件,文件夹管理
有点:高层模块调用简单,节点自由度增加
缺点:叶子和节点声明都是实现类,不是接口,违反了依赖倒置原则
装饰器模式
向现有的对象添加新功能,且不改变其结构,为对象添加额外的职责,不想增加很多子类的情况下拓展类
例子:一幅画可以挂到墙上,在挂墙上之前可以装到画框里。
优点:装饰类和被装饰类可以独立发展,不会互相耦合,可代替继承
缺点:多层装饰比较复杂
外观模式
隐藏系统的复杂性,提供一个访问系统的接口,降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口
例子:去医院看病,需要挂号,门诊,开药,缴费,取药,很复杂,提供接待人员处理就很方便
优点:减少系统相互依赖,提高灵活性,提高安全性
缺点:不符合开闭原则,修改麻烦
享元模式
减少创建对象的数量,尝试重用现有的同类对象,没有找到才会创建,避免重新创建
例子:体育馆要举行很多场足球比赛,每场比赛的地点都是体育馆,不会再新创建体育馆
优点:减少对象创建,降低内存,效率提高
缺点:提高系统复杂度,需要分离内部状态和外部状态,而且外部状态固化,不随内部状态变化
代理模式
一个类代表另一个类的功能,要访问的对象在远程机器,直接访问会给系统带来麻烦,与适配器区别,代理不能改变所代理的接口,适配器改变对象的接口,与装饰器区别,代理为了加以控制,装饰器为了增加功能
例子:火车票不一定在火车站买,可以去代售点,代售点就是火车站的代理类
优点:职责清晰,高拓展性,智能化
缺点:可能造成请求变慢,需要额外的工作