设计模式总结(三)----结构型模式

本文深入探讨了设计模式中的结构型模式,包括适配器、桥接、组合、装饰、外观、享元和代理模式。每种模式的功能、优点及缺点都被详细阐述,帮助读者理解如何在实际开发中应用这些模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三.设计模式中的结构型模式

1.适配器模式

功能:

使一个类的接口装换成客户希望的另外一个接口,适配器模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作

优点:

可以使两个无关系的类一起工作,降低耦合度,增加了复用性,灵活性更好

缺点:

当我们大量使用适配器模式的时候会出现非常杂乱的情况,例如我们需要调用A类,却适配到了B类,给我们程序编写大大增加了难度,如果不是非常有必要,建议直接对代码进行重构,而去使用适配器模式.

2.桥接模式

功能:

将抽象部分与它的实现部分分离,使它们都可以独立地变化.

优点:

因为桥接模式将抽象部分与它的实现部分分离了,增大了它们之间的灵活性,有助于分层设计,扩展性优异,还可以方便动态切换实现方式.

缺点:

桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。

3.组合模式

功能:

将对象组合成树形结构以表示’部分’-'整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.

优点:

组合模式使得客户端代码可以一致地处理对象和对象容器,无需关系处理的单个对象,还是组合的对象容器.由于他的层次结构可以更容易往组合中加组件.

缺点.

使得设计更加复杂.客户端需要花更多时间理清类之间的层次关系.(这个是几乎所有设计模式所面临的问题).

4.装饰模式

功能:

动态地给一个对象添加一些额外的职责.

优点:

对于增加功能这点来说,它比生成子类更加灵活,并且通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象.

缺点:

使用装饰模式增加新功能时候的,会生成其他许多小对象,程序复杂度提高,因此对于如果程序出现错误,需要一个一个的进行排查,非常繁琐.

5.外观模式

功能:

为子系统中的一组结构提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一字系统更加容易使用.

优点:

外观模式对客户端屏蔽了子系统组件,从而简化了接口,减少了客户端处理的对象数目并使子系统的使用更加简单。

缺点:

增加新的子系统可能需要修改外观类或客户端,违背了开放封闭原则。

6.享元模式

功能:

为运用共享技术有效地支持大量细粒度的对象.

优点:

享元模式由于使用了外部状态,外部状态相对独立,不会影响到内部状态,所以享元模式使得享元对象能够在不同的环境被共享,并且它创建一个享元工厂极大的减少了对象创建的个数.

缺点:

由于享元模式需要区分外部状态和内部状态,使得应用程序在某种程度上来说更加复杂化了.并且为了访问外部对象的时候,我们需要的时间需要更长

7.代理模式

功能:

为其他对象提供一种代理以控制对这个对象的访问

优点:

减少了类,使代码更加灵活,而且最重要的一点再使用动态代理后,我们可以在不修改源代码的基础上直接增强被代理对象,在学习途中我们经常可以见到代理模式和使用它.

缺点:

在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢.并且使程序更加复杂,但是之前说过使用了设计模式在大多数情况下,源代码的复杂度都会提高,所以在目前看来这个并不能算是它的致命缺点吧,个人感觉代理模式的设计非常好,但是又从根本上说来,它与外观模式和适配器模式的差距又不大,甚至可以说在一定的情况下直接使用代理模式收益并不会太好.

一点小感想:

最后说一点:在学习设计模式的时候我们不能纠结哪个模式最好,只有最适合的,就和开发一样,在开发的同时我们要广范围的思考效率和可行性问题,没有最好的代码,只有最适合的代码.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值