结构型模式之适配器

结构型模式主要讲述如何组合类和对象以获取更大功能的结构,同样,按照模式的主要用途,结构型模式也分为两个层次:

1、结构型类模式,采用继承机制来组合接口,java没有多继承功能,但是可以实现(implements)多个接口,实现了多个父接口的类便拥有了父接口的功能,GOF给出的结构型类模式只有一个,那就是Adapter(适配器)模式,适配器模式的实现还可以用对象模式,一会儿会给出例子。

2、结构型对象模式,该类型的模式不是对接口进行组合,而是描述如何对一些对象进行组合,从而实现一些新功能。因为它可以在运行时刻改变对象的组合关系,所以对象组合方式具有更大的灵活性,这是用静态类组合所不能达到的。现在以适配器为首篇,总结一下结构型模式。

GOF对适配器下的定义为:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。比如说,A要实现一个功能,而类似的功能B已经对其进行了实现,但是A又不能直接调用B的功能,怎么办呢?这时可以新创建一个类,使得该类同时具有A和B的功能属性,这样问题不就解决了,实现方案有两种,分别是类适配器和对象适配器,首先总结类适配器模式,结构图如下:

因为Java不支持多继承机制,所以将要实现的目标功能类设置为Interface类型,代码如下:

 1 package adapter;
 2
 3 public class Test {
 4     public static void main(String[] args) {
 5         Target target=new Adapter();
 6         target.Request();
 7     }
 8 }
 9
10 interface Target{
11     public void Request();
12 }
13 class Adaptee{
14     public void SpecificRequest(){
15         System.out.println("this is specific request");
16     }
17 }
18 class Adapter extends Adaptee implements Target{
19
20     @Override
21     public void Request() {
22         // TODO Auto-generated method stub
23         super.SpecificRequest();
24     }
25 }

使用类适配器模式有很大的限制,Java本身的单继承的语言,如果我们要适配多个功能时该怎么办?若用类适配器模式的话,我们的继承层次会很多,并且根据组合优先于继承的准则,我们也应该尽可能少地使用继承,下面总结对象适配器模式,结构图如下:

对应的代码如下:

 1 package adapter;
 2 public class Test {
 3     public static void main(String[] args) {
 4         Target target=new Adapter(new Adaptee());
 5         target.Request();
 6     }
 7 }
 8 interface Target{
 9     public void Request();
10 }
11 class Adaptee{
12     public void SpecificRequest(){
13         System.out.println("this is specific request");
14     }
15 }
16 class Adapter implements Target{
17     private Adaptee adaptee;
18     public Adapter(Adaptee adaptee){
19         this.adaptee=adaptee;
20     }
21     @Override
22     public void Request() {
23         // TODO Auto-generated method stub
24         adaptee.SpecificRequest();
25     }
26 }

对象适配器并未继承待适配的类Adaptee,而是利用Adaptee对象直接访问其要适配的方法,好处就是我们多种不同的源(Adaptee)适配到同一个目标中去,但是我们无法对院类的方法进行置换(Override),因为我们并未继承Adaptee类,所以这点是做不到的,因此,要根据实际情况,分析应该采用类适配器还是对象适配器。

时间: 2024-11-08 04:02:49

结构型模式之适配器的相关文章

c#设计模式·结构型模式

看的过程中,发现好多模式都用过,只是没有总结,或者是不知道叫这个名字吧··· 这里列举结构型模式,适配器.桥接.过滤.组合.装饰器.外观.享元.代理, 适配器模式:将现存的对象放到新的环境里边去,但是接口不一样,其实就是添加一个类把新的接口包装一样 之前公司的wcf服务端就是这种模式,公司很多部门,不同部门不同的业务都有自己相应的服务,之前是分开的,用的服务多的时候开服务很麻烦,现在想把他们统一起来,就可以用这种方式,wcf服务以接口定义契约,在实现类中写具体业务,可以定义一个统一的空接口,然所

设计模式之“结构型模式”(一)

结构型模式主要分为七大模式,分别为:适配器模式.桥接模式.组合模式.装饰模式:.外观模式.享元模式.代理模式. 适配器模式 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 一.适用时期 1.适用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑适用适配器. 2.两个类所做的事情相同或相似,但是具有不同的接口时要使用它. 3.在双方都不太容易修改的时候再使用适配器模式适配. 二.DataAdapt

设计模式4 结构型模式

设计模式4  结构型模式 目录 代理模式 装饰器 外观模式 适配器模式 代理模式,美国,韩国代理购物 [email protected]:~$ cat main.cpp  #include<iostream> using namespace std; class Item //商品 { public: Item(string kind ,bool fact) { this->kind = kind; this->fact = fact; } string getKind() { r

设计模式06: Adapter 适配器模式(结构型模式)

Adapter 适配器模式(结构型模式) 适配(转换)的概念无处不在:电源转接头.电源适配器.水管转接头... 动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象不能满足的.如何应对这种“迁移的变化”?如何既能够利用现有对象的良好表现,同时又能满足新的应用环境所要求的接口? 意图(Intent)将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一

设计模式之结构型模式

设计模式被分成了三大类型:创建型.结构型和行为型.本文介绍一下结构型模式. 结构型模式包括适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式和代理模式. 适配器模式:将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 应用:系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配.适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况. 桥接模式:将

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

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

ANDROID 中设计模式的采用--结构型模式

结构型模式中的适配器模式.外观模式.装饰模式.代理模式都属于包装模式,都是对另外的类或对象的包装,只是各自的意图不同. 适配器模式通过对另外的类或对象的包装,将其接口转换为用户期望的接口,达到接口适配的目的. 外观模式是对包装的一组类或对象提供一个高层接口,意图是简化接口,使系统更加容易使用. 装饰模式的意图是在不改变包装对象接口的情况下为其增加另外的功能或职责. 代理模式的意图是通过对包装对象的包装以便控制对包装对象的访问. 适配器模式.外观模式对客户提供的接口与其包装类的接口有所不同,也就是

设计模式(七) : 结构型模式--适配器模式

适配器模式主要是为了解决接口不符合系统需要的问题.分成类的适配器和对象的适配器. 1. 类的适配器: 示意性代码: package com.javadesignpattern.Adapter; public interface Target { public void sampleOperation1(); public void sampleOperation2(); } package com.javadesignpattern.Adapter; public class Adaptee {

《设计模式》结构型模式1

上篇博文写了创建型模式中的(工厂家族).这次来介绍一下结构型模式.主要从各个模式的含义,优缺点,适用场合及结构图来了解结构型模式. 结构型模式包括有7种模式,适配器模式,外观模式,代理模式,桥接模式,享元模式,组合模式,装饰模式.每个模式各有优缺,孰优孰劣,请看下文. 1.适配器模式 定义:将一个类的接口转换成客户希望的另外一个接口.使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 结构图: 适用于:想要使用一个已存在的类,但接口和你的要求不同时 在软件开发后期或是维护时期,在双方都不