结构型模式主要用来处理类或对象的组合使用问题。主要目的是使用简单的类或对象,组合出一个结果复杂功能齐全的对象。结构型对象分为类结构型模式和对象结构型模式,前者采用继承方式,后者采用组合或聚合方式。其中组合或聚合方式比继承方式耦合度低,灵活性高。
结构型模式主要分为7种:代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式。
- 代理模式
定义:因安全、隐私或其他原因需要给对象提供一个代理以代替该对象访问其它服务或对外提供访问接口。通俗来讲,就是我出面不方便,找个中介帮我做事。
优点:职责清晰;安全性;可扩展等。
缺点:因真是对象之间添加一层代理,有时会导致处理速度变慢;需要额外的工作量等。
应用实例:防火墙代理、远程代理、缓存代理等等。
- 适配器模式
定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
优点:增加了类的透明性;提高了类的复用;灵活;解决了适配者类与目标类接口不一致的问题等。
缺点:过度使用容易导致代码逻辑混乱;更换适配器的实现过程较为复杂;只能继承一个适配者类等。
应用实例:模拟计算机读取SD卡等;
扩展:双向适配器类既可以把适配者接口转换成目标接口,也可以把目标接口转换成适配者接口
- 桥接模式
定义:将抽象部分与实现部分相分离,使得它们都可以独立变化。这种模式采用组合关系代替继承关系来实现,降低了抽象和实现类的耦合度。
优点:抽象和实现分离;扩展性强;实现细节对客户透明等。
缺点:增加了系统的理解和设计难度;由于聚合关系建立在抽象层,要求开发者对抽象进行设计和编程。
- 组合模式
定义:组合模式又叫部分-整体模式,它是一种将对象组合成树状结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
优点:一致地处理单个对象和组合对象;对象节点自由添加;
缺点:树的叶子节点和树枝节点都是实现类;类之间层次关系复杂;继承困难
- 装饰器模式
定义:动态地给一个对象添加一些额外的职责,同时又不改变其结果。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。相比生成子类,更为灵活。
优点:装饰类和被装饰类可以独立发展,耦合性低;比继承方式更加灵活;可以设计不同的具体装饰类
缺点:多层装饰会变得复杂
应用实例:网络游戏中,角色大招变身,或者升级获取新的能力
- 外观模式
定义:隐藏系统的复杂性,向客户端提供一个客户端可以访问系统的接口。外观模式定义了一个高层接口,使得含有一组接口的系统或含有多个子系统的系统更加容易使用。
优点:降低系统与客户端的耦合度;客户端使用更友好;提高了系统的安全性;提高了系统的灵活性
缺点:系统修改会特别麻烦;不能很好的限制克哈哈哈使用子系统类
- 享元模式
定义:运用共享技术来有效地支持大量细粒度对象的复用。它提供了减少对象数量从而改善应用所需的对象结构的方式,减少了创建对象的数量,减少内存占用和性能提升。
优点:减少对象的创建;降低内存消耗;提升效率;
缺点:提高了系统的复杂度;运行时长会变长