【设计模式】结构型模式

       结构型模式一共有7个,分别是适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式。

适配器

       将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式分为类适配器模式和对象适配器模式。

优点: 

1、解决两个已有接口之间不匹配的问题,不需要考虑这些接口是怎样实现的,也不考虑它们各自可能会如何演化。不需要对两个独立设计的类中任一个进行重新设计,就能够使它们协同工作。 

2、增加类的复用性:同一个适配器类可以在多个不同的系统中复用。

3、灵活性和扩展性较好:就像手机充电器一样,你没有,借一借别人的就可以给自己的手机充电。

缺点:

1、不能适配多个适配者。

2、目标抽象类只能为接口,不能为类。

桥接模式 

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

 优点:

1、实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少了它们之间的耦合。

2、提高了系统的可扩展性。

缺点:增加系统的理解与设计难度。 

组合模式  

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

优点:  

1、定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,在客户代码中,任何用到基本对象的地方都可以使用组合对象了。

2、组合模式让客户可以一致地使用组合结构和单个对象。

缺点:在增加新构件时,很难对容器中的构件类型进行限制。

装饰模式 

       动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

优点:

1、把类中的装饰功能从类中搬移去除,这样可以简化原有的类。

2、对于扩展一个对象的功能,装饰模式比继承更加灵活性,不会导致类的个数急剧增加。

3、有效地把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑。 

4、可以通过一种动态的方式来扩展一个对象的功能,从而实现不同的行为。

缺点: 装饰的顺序很重要,顺序错了就会出问题了。

外观模式 

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

 优点: 

1、对客户端屏蔽了子系统组件,使得客户端代码变得很简单。

2、子系统发生变化时,不会影响到调用它的客户端,只需调整外观类即可。

3、一个子系统的修改,对其他子系统没有任何影响,而且子系统内部变化也不会产生影响。

缺点: 

1、不能很好地限制客户端直接使用子系统类。

2、如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了“开放-封闭”原则。

享元模式 

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

 优点:

1、通过共享大幅度地减少单个实例的数目,节约系统资源,提高系统性能。

2、享元模式的外部状态相对独立,而且不会影响内部状态,从而使得享元对象可以在不同环境中被共享。

缺点: 因为需要分离出内部状态和外部状态,所以使得系统变得复杂。

代理模式 

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

 

优点: 

  1. 代理作为调用者和真实对象的中间层,降低了模块间的耦合性。

缺点: 

  1. 由于在客户端和真实对象之间增加了代理对象,因此有些类型的代理模式可能会造成请求处理的速度变慢。
  2. 实现代理模式需要增加额外的代码,有些代码模式的实现可能很复杂。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值