设计模式-结构型

适配器模式

适配器模式(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)代理。



猜你喜欢

转载自blog.csdn.net/github_39336148/article/details/80425876
今日推荐