JAVA语言设计模式学习之结构型模式讲解
小标 2019-01-08 来源 : 阅读 568 评论 0

摘要:本文主要向大家介绍了JAVA语言设计模式学习之结构型模式讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言设计模式学习之结构型模式讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


我们已经知道,设计模式有23种:




  设计模式类型

  包括
创建型模式 (5种)单例模式、抽象工厂模式、建造者模式、工厂方法模式、原型模式
结构型模式(7种)适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式 (11种)模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式、访问者模式


接下来对结构型模式进行一个详细的介绍和说明




 
 
 

适配器模式:    


将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作


优点:

1,将目标类与适配者类解耦:就像自己的笔记本和电源之间一样,适配器充电器的作用使得只要有电源就可以使用笔记本,而不会固定在一个地方

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

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

缺点:

1,不能适配多个适配者

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

   




 
 
 

桥接模式:    


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


优点:

1,分离抽象接口及其实现部分

2,提高了系统的可扩展性

缺点:

桥接模式的使用会增加系统的理解与设计难度

   




 
 
 

装饰模式:    


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


优点:

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

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

3, 可以对一个对象进行多次装饰,通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合,得到功能更为强大的对象。

4,具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,原有类库代码无须改变,符合“开闭原则”。

缺点:

1,使用装饰模式进行系统设计时将产生很多小对象,在一定程序上影响程序的性能。

2, 装饰模式提供了一种比继承更加灵活机动的解决方案,但同时也意味着比继承更加易于出错,排错也很困难,较为繁琐。

   




 
 
 

组合模式:    


组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构


优点:

1,组合模式可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,它让客户端忽略了层次的差异,方便对整个层次结构进行控制。

2,客户端可以一致地使用一个组合结构或其中单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码。

3,在组合模式中增加新的容器构件和叶子构件都很方便,无须对现有类库进行任何修改,符合“开闭原则”。

4,组合模式为树形结构的面向对象实现提供了一种灵活的解决方案,通过叶子对象和容器对象的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。

缺点:

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

   




 
 
 

外观模式:    


为子系统中的一组接口提供一个统一的入口,这个接口使得这一子系统更加容易使用。它是迪米特法则的一种具体实现


优点:

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

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

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

缺点:

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

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

   




 
 
 

享元模式:    


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


优点:

1,可以减少内存中对象的数量,从而节约系统资源,提高系统性能

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

缺点:

使得系统变得复杂,因为需要分离出内部状态和外部状态

   




 
 
 

代理模式:    


给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问


优点:

1,协调调用者和被调用者,在一定程度上降低系统的耦合度

2,可以针对抽象主题角色进行编程,增加和更换代理类的时候不需要修改源代码

缺点:

1,因为在客户端和对象之间增加了代理,所以可能会造成请求的处理速度变慢

2,实现代理模式需要额外的工作

   


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程