设计模式(5) 结构型模式总览

来源:互联网 发布:vr球面投影算法 编辑:程序博客网 时间:2024/05/29 02:23

桥接模式(Bridge模式


核心思想: 将接口抽象化(接口类)然后通过继承将客户端(操作类)隔离开来达到解耦的作用。

应用场景: A sir 和Bsir 两个人分别负责一个系统的两个模块,A需要调用B的实现操作,后期测试发现B sir的模块效率太低,于是B 需要优化改写自己的代码,如果这是A 和B没有事先定义好接口方式,那么很有可能B进行优化代码后A 也需要做相应的修改。这个时候桥接模式就派上用场了,需要A 和B先定义好彼此之间的调用关系,并用接口类的方式来实现调用。这样我们只需要保证接口不变,B如何修改只需要新增一个子类或者修改子类的方法而A在这个情况下并不需要做任何修改。

适配器(Adapter)模式


核心思想: ,Adapter模式提供了将已知类(第三方库)的接口转化为我们希望的接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

应用场景:我兄弟部门需要我们提供一个接口类创建文件,我们现在有类可以实现这样的功能只是接口和他们不大一样,那么就可以通过适配器方法来实现这个类。

装饰(Decorator)模式


核心思想: 为一个可能有很多不同动作的子类新增一个接口类(装饰)作为这许多子类的父类。

应用场景:  其实就是为了将这许多不相干的子类和component分离出来,同时又有一个统一的父类 Decorator来作为管理的接口(桥模式?异曲同工吧)。

 

组合(Composite)模式


核心思想: 将对象组合成树形结构(父子具有同属性)以表示”父-子”的层次结构,同时父子具有相同的接口信息。

应用场景: 在处理一些具有树状结构的数据时候,组合模式提供一个比较好的解决方案。比如xml格式的数据我们可以将它看做一棵树,节点(树枝)具有这样的特点:他既是子节点(树干的子节点)又可能是父节点(叶子的父节点)(相当于树干的作用)。这些节点具有和父节点相同的属性,这个时候用组合模式设计。

5 共享元(Flyweight)模式


核心思想: 共享模式就是一个资源池,用于减少那些需要重复创建有密度大的开销。

 

应用场景: 需要有资源池就可以采用这个模式。

 

6 外观(Facade)模式

 

核心思想: 为子系统中的一组接口提供一个一致的界面,这个接口使得这一子系统更加容易使用。

应用场景: 当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可 以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。当你需要构建一个层次结构的子系统时,使用Facade模 式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过Facade进行通 讯,从而简化了它们之间的依赖关系。

 

7 代理(Proxy)模式


核心思想: 逻辑上继承一个已有类的子类,从而扩展原有的子类的功能。

应用场景: 实现了逻辑和实现的解耦。将Proxy作为实现。ConcreteSubject左右逻辑部分。

 

 --不对之处欢迎批评指教。以此作为结构型模式的开篇,后续将逐一详细介绍。微笑

 


原创粉丝点击