Java设计模式之接口型模式总结

摘要: 原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6508967.html

  之前认真学习了Java设计模式中的四大接口型模式,分别为:适配器模式(Adapter)、外观模式(Facade)、合成模式(Composite)、桥接模式(Bridge)。

1、在此处再温习一下四种设计模式:

(1)适配器模式:

  我们能够访问的类中不存在我们要访问的内容时,就可以使用这个适配器模式,当然就类而言,其实不存在什么不能被访问,这里的不能访问都是人为的制约,规则的限制。

  最为常见的就是在常规项目中使用的MVC分层模式,尤其在SpringMVC中体现的淋漓尽致:我们的请求来到SpringMVC的核心Servlet(DispatcherServlet)之后,由其进行请求分发,找寻合适的控制器(Controller),一般控制器是不会进行任何的业务处理的,它的作用就是用来接收请求与返回响应,而具体的请求与响应的处理则是在业务层(Service层)实现。

  这样请求的目的很明确,就是要进行业务处理,而接收请求的控制器被人为(规则)限制不允许内部出现任何业务代码,怎么办?将其当做一个适配器来处理,使用组合的方式来控制器所在类中引用业务类(接口指向实现类),然后在控制器方法中调用能够完成请求目的的一个或者若干业务层类中的方法来进行业务处理,这正是适配器模式的一种典型应用。

  请参考《Java设计模式之《适配器模式》及应用场景》一文

(2)外观模式:

  外观也就是脸面、门脸,并不是说我们一定要使用外观,而是使用外观可以有诸多好处,它能够屏蔽系统复杂性,而且如果对系统功能的实现进行优化或更改,只需要对外观类进行简单的更新即可,而不会影响到使用这个系统的其他系统,这是外观类最重要的功能。

  在这里我突然想到,上面举的例子中,控制器调用业务层实现类来完成具体的业务处理,从某种角度来看,同样也是外观模式的一种应用:控制器类针对整个网站业务系统而言何尝不是一个外观类的存在,外部请求来到系统后台,直面的正是这些控制器类,而不是复杂的业务处理类,在控制器中通过调用业务类方法的方式来为外部请求提供服务,这样整个复杂的后台业务系统被接口屏蔽,请求者不必关心自己要调用哪个业务类来实现自己的请求,而是有特定的控制器来完成这个内部调用。当我们对业务实现方法进行修正或更新时,只需要在控制器中稍作修改即可,整个请求毫无影响,对它而言未发生任何改变。

  只是突然想到一点:我记得在外观模式中有这样的描述,外观类对系统并不是真正的屏蔽,其他系统任然可以通过直接调用系统内部的方法来完成功能,只是较为复杂罢了,这在SpringMVC中好像无法达成,因为SpringMVC被设计成为接口匹配方式来寻找控制器,也就是说请求来临只能找控制器,是无法直接调用业务实现类的,也许通过一些复杂的方式可能达到。

  请参考《Java设计模式之《外观模式》及应用场景》一文

(3)合成模式:

  有别于之前和之后要谈及到的模式,我认为合成模式较为狭隘,是指应用范围较为狭隘,好像主要针对的就是树形结构而言,如文件目录、多级目录结构等。

  使用合成模式的目的并不是组合(即将下一级包含在上一级中),而在于一视同仁这一点。

  何为一视同仁?简单的说就是将树形结构的两种形式一概而论,将目录结构的文件与目录一概而论,而不是分而论之。

  如果将两者一视同仁,那么就能将二者抽象为一个概念(通常应该是用抽象类来表述),然后我们再针对二者分开进行抽象的继承实现,具体的区分二者,这样做,好似比原本就分而论之的结构要复杂,其实不然,我们使用抽象后,二者被概括为一个概念,这样我们在使用的时候,就可以使用同一个接口来进行实现(Java中的多态:抽象类指向实现类),具体的实现不必在代码中指定,而是自动根据情况来完成。这样不必再针对二者分开进行显式调用,简化了代码。

  请参考《Java设计模式之《桥接模式》及应用场景》一文

(4)桥接模式:

  以前诸多文章都未能在博客园首页留住,但这篇文章《Java设计模式之《桥接模式》及应用场景》尽然入了编辑的眼,进而被达内科技发布到了《今日头条》上,说明这篇文章还是不错的。

  说道桥接模式,又称桥梁模式,望文生义,就是一座桥。这是一座接口桥。

  查阅诸多文献,说道桥接模式就是将抽象与实现解耦,说实在话,不懂!因为这句话本身就抽象至极,谈何理解!

  其实此处的抽象指的是调用方的抽象类实现,实现指的是被调用方的接口实现,这里谈及到两个实现,正是我们常见的实现:就是通过继承的方式来实现抽象类,通过实现的方式来实现接口,无外乎如此。

  再谈谈解耦,这里的解耦也很好理解,就是解除直接耦合,什么样式直接耦合呢,很简单,通过继承类的方式实现的功能就是直接耦合,这样的耦合导致修改和扩展将会极为麻烦,这也正是解耦的目的所在。

  再谈谈如何解耦,这里涉及到的双方就是调用者与被调用者,如果通过继承的方式来进行虽然符合Java继承规则,但耦合性太大,不易双方扩展,这样在二者之间架设一道桥梁,将二者的那种耦合隔开,通过中间桥来进行连接,这样一来,双方的扩展不再对对方产生任何影响,可以任意发展。

  那么如何来架设这道桥梁呢?

  很简单,使用接口与抽象类这两个神器,我们为被调用者创建一个接口,而这个接口就是那座桥,其实我们将桥与被调用者绑定在一起了,而针对调用者,我们创建一个抽象类(为何此处是抽象类,而不是接口呢?因为我们要在这个抽象类内部引用桥接口,而接口中一般是没有属性的<只有静态常量>),故使用抽象类),在其中引用桥接口,并创建合适的方法,用于被继承类实现来进行扩展。

  如此一来,目的达成,不明白的,请看《Java设计模式之《桥接模式》及应用场景》一文。

2、接口类型

  上述的四种设计模式均涉及到了接口,此处的接口并不是Interface这个意思,而是一种“对外”或“被调用”的意思,还有一层屏蔽的意思。

  接口类型多是使用接口来屏蔽具体的实现,为调用者提供一个友好的界面(接触口)。

(理解尚浅,待补充)

  

Java设计模式之《组合模式》及应用场景

时间: 2024-08-04 03:38:03

Java设计模式之接口型模式总结的相关文章

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现

Java设计模式之工厂方法模式(转) 实现是抽象工厂?

Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章]          一 .工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色

java设计模式4--建造者模式(Builder)

本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,转载请注明源地址. 建造者模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 概述 当系统准备为用户提供一个内部结构复杂的对象时,就可以使用生成器模式,使用该模式可以逐步地构造对象,使得对象的创建更具弹性.生成器模式的关键是将一个包含有多个组件对象的创建分成若干个步骤,并将这些步骤封装在一个称作生成器的接口中. 适用性 1.当创建复杂

Java设计模式之结构型模式

结构型设计模式是从程序的结构上解决模块之间的耦合问题.包括以下七种模式: 适配器模式:可以将类的一个借口匹配另一个接口 组合模式:对象的组合 代理模式:一个简单的对象代替一个复杂的稍后会被调用的复杂对象 外观模式:一个类表示一个子系统 享元模式:用于共享对象,其中每个实例都不保存自己的状态.而是将状态保存在外部 桥接模式:将对象的接口与实现分离 装饰模式:动态给对象添加职责结构型设计模式是从程序的结构上解决模块之间的耦合问题 适配器模式: 原文链接:一个示例让你明白适配器模式 含义:将一个类的接

java设计模式之 装饰器模式

适AT java设计模式之 装饰器模式 装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,动态给一个对象添提供了额外的功能. 我们通过下面的实例来演示装饰器模式的用法.模拟一个人从想吃饭.找饭店.享受美食.结束吃饭的过程 代码展示: 首先创建一个被修饰的接口 Eat package deco

Java设计模式之享元模式实例详解

本文实例讲述了Java设计模式之享元模式.分享给大家供大家参考,具体如下: 解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象.比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象.如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了.那么如果要是每个字母都共享一个对象,那么就大大节约了资源. 在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweigh

折腾Java设计模式之中介者模式

博文原址:折腾Java设计模式之中介者模式 中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. 通俗点来讲就是提供一个中介平台,说到平台,那其实很容易联系到我们很熟悉的房地产中介.我们可以直接通过这个平台得到我们想要的信息,不用对象自身与其他对象交互. 买房子租房子就不需要去找房东,只需要在中介那里获取相应的×××信息.如下图那样,两方只

图解Java设计模式之职责链模式

图解Java设计模式之职责链模式 学校OA系统的采购审批项目 :需求是 传统方案解决OA系统审批,传统的设计方案 职责链模式基本介绍 职责链模式解决OA系统采购审批 职责链模式在SpringMVC框架应用的源码 职责链模式的注意事项和细节 学校OA系统的采购审批项目 :需求是 采购员采购教学器材1)如果金额 小于等于 5000,由教学主任审批 (0<=x<=5000)2)如果金额 小于等于 10000,由院长审批(5000 < x <= 10000)3)如果金额 小于等于 3000

设计模式之接口型模式

今天来总结一下接口型模式下的第一个设计模式--------接口型模式. 1.首先来说什么是接口型模式? 答:接口型模式就是利用接口规范类之间的行为使得实现该接口的类可以遵循代码的注释.测试和其他的文档说明,使用接口可以对一个类或者一组类的方法进行定义或者重定义.使用接口型模式的好处就是使得接口和实现分离,不会有相互的影响,并且使得代码更加的清晰明了. 2.接口和抽象类的区别有哪些? 答:a.接口是被实现的,使用的关键字是implements,而抽象类是被继承的,使用的关键字是extends. b