适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。
优点:
1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。
缺点:
1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
应用:Arrays.asList
桥接模式
桥接(Bridge)是用于把
抽象化与实现化解耦,
使得二者
可以独立变化
。这种类型的设计模式属于结构型模式,
它通过提供抽象化和实现化之间的桥接结构
,来实现二者的解耦。
将抽象部分与实现部分分离,使它们都可以独立的变化。
优点:
1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。
缺点:
桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
过滤器模式
这种模式允许开发人
员使用不同的标准来过滤一组对象
,通过逻辑运算以解耦的方式把它们连接起来。
组合模式
组合模式,又叫部分整体模式,是用于把
一组相似的对象当作一个单一的对象。
组合模式
依据树形结构来组合对象,
用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
优点:
1、高层模块调用简单。 2、节点自由增加。
缺点:
在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。
使用场景:
部分、整体场景,如树形菜单,文件、文件夹的管理。
装饰器模式
装饰器模式,允许向一个现有的对象添加新的功能,同时又不改变其结构。
场景:Java IO, 2、Component 类充当抽象角色,不应该具体实现。 3、修饰类引用和继承 Component 类,具体扩展类重写父类方法。
外观模式
外观模式
:隐藏系统的复杂性
,并向客户端
提供了一个客户端可以访问系统的接口
。
优点:
1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:
不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
使用场景:
1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。
应用:mvc模式
享元模式
享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能。
关键代码:
用 HashMap 存储这些对象。
应用实例:
1、JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面。 2、数据库的数据池。
优点:
大大减少对象的创建,降低系统的内存,使效率提高。
缺点:
提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。
代理模式
在代理模式中,一个类代表另一个类的功能。(
为其他对象提供一种代理以控制对这个对象的访问。
)
应用实例:
1、Windows 里面的快捷方式。2.spring aop
优点:
1、职责清晰。 2、高扩展性。 3、智能化。
缺点:
1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
使用场景:
1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。