设计模式之各种适配器

7种结构型模式:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。当中对象的适配器模式是各种模式的起源,我们看以下的图:

适配器模式将某个类的接口转换成client期望的还有一个接口表示,目的是消除因为接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。

类适配器模式:

代码:

public class Source {  

    public void method1() {
        System.out.println("this is original method!");
    }
}  

public interface Targetable {  

    /* 与原类中的方法同样 */
    public void method1();  

    /* 新类的方法 */
    public void method2();
}  

public class Adapter extends Source implements Targetable {  

    @Override
    public void method2() {
        System.out.println("this is the targetable method!");
    }
}  

Adapter类继承Source类,实现Targetable接口。以下是測试类:
public class AdapterTest {  

    public static void main(String[] args) {
        Targetable target = new Adapter();
        target.method1();
        target.method2();
    }
}
这样Targetable接口的实现类就具有了Source类的功能。

对象适配器模式:

public class Wrapper implements Targetable {  

    private Source source;  

    public Wrapper(Source source){
        super();
        this.source = source;
    }
    @Override
    public void method2() {
        System.out.println("this is the targetable method!");
    }  

    @Override
    public void method1() {
        source.method1();
    }
}
測试类:

接口适配器模式:

应用场景:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时。必须实现该接口的全部方法,这明显有时比較浪费,由于并非全部的方法都是我们须要的,有时仅仅须要某一些,此处为了解决问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了全部的方法。而我们不和原始的接口打交道,仅仅和该抽象类取得联系,所以我们写一个类,继承该抽象类。重写我们须要的方法即可。看一下类图:

代码:

public interface Sourceable {  

    public void method1();
    public void method2();
}
抽象类Wrapper2:
public abstract class Wrapper2 implements Sourceable{  

    public void method1(){}
    public void method2(){}
}  

public class SourceSub1 extends Wrapper2 {
    public void method1(){
        System.out.println("the sourceable interface‘s first Sub1!");
    }
}  

public class SourceSub2 extends Wrapper2 {
    public void method2(){
        System.out.println("the sourceable interface‘s second Sub2!");
    }
}  

public class WrapperTest {  

    public static void main(String[] args) {
        Sourceable source1 = new SourceSub1();
        Sourceable source2 = new SourceSub2();  

        source1.method1();
        source1.method2();
        source2.method1();
        source2.method2();
    }
}  

public class AdapterTest {  

    public static void main(String[] args) {
        Source source = new Source();
        Targetable target = new Wrapper(source);
        target.method1();
        target.method2();
    }
}

类的适配器模式:当希望将一个类转换成满足还有一个新接口的类时,能够使用类的适配器模式,创建一个新类,继承原有的类。实现新的接口就可以。

对象的适配器模式:当希望将一个对象转换成满足还有一个新接口的对象时,能够创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法即可。

接口的适配器模式:当不希望实现一个接口中全部的方法时,能够创建一个抽象类Wrapper。实现全部方法。我们写别的类的时候,继承抽象类就可以。

时间: 2024-10-08 09:29:37

设计模式之各种适配器的相关文章

"围观"设计模式(30)--结构型设计模式总结(适配器、代理、装饰、外观、桥梁、组合、享元)

设计模式代码下载地址 设计模式代码下载地址 1  适配器模式 在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper).将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中.----WIKIPEDIA 个人理解 适配器模式:将两个不一致或者说无法直接使用的类或者接口通过适配器模式进行兼容,使得他们可以在一块使用.适配器模式在之前的项目中我是用于处理数据的不兼容的,对

设计模式学习心得<适配器 Adapter>

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能. 概述 意图 将一个类的接口转换成客户希望的另外一个接口. 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 主要解决 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的. 何时使用 系统需要使用现有的类,而此类

设计模式之【适配器】

模式设计原则:开闭原则,对扩展开放,对修改关闭:针对接口编程: 1.原始类方法 package Adapter; public class Source { public void method1(){ System.out.println("这个是原始类方法"); } } 2.接口实现原始方法,并添加新方法 package Adapter; public interface Targetable { /**与原类方法相同*/ public void method1(); /**新类方

iOS常用设计模式——适配器Adapter

1.什么是适配器设计模式(Adapter)   (What) 适配器设计模式是一种结构型设计模式, 它的作用是把一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器设计模式有两种实现方式:1.)通过继承来实现两个接口,叫类适配器: 2.)通过引用来避免对象适配器继承被适配对象,叫对象适配器. 图1: 类适配器的UML图 在类适配器中,Adapter与Adaptee之间的关系是继承,我们通过继承来实现对Adaptee中+ specific

设计模式大全

Longronglin之设计模式: Christopher Alexander 说过:“每个模式描写叙述了一个在我们周围不断反复发生的问题,以及该问题的解决方式的核心.这样,你就能一次重新地使用该方案而不必做反复劳动”. 模式描写叙述为:在一定环境中解决某一问题的方案,包含三个基本元素--问题,解决方式和环境. 阅读类图和对象图请先学习UML 创建模式 结构模式 行为模式 创建模式:对类的实例化过程的抽象.一些系统在创建对象时,须要动态地决定如何创建对象,创建哪些对象,以及如何组合和表示这些对象

设计模式大全(转)

设计模式大全 Longronglin之设计模式: Christopher Alexander 说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复劳动”. 模式描述为:在一定环境中解决某一问题的方案,包括三个基本元素--问题,解决方案和环境. 阅读类图和对象图请先学习UML 创建模式 结构模式 行为模式 创建模式:对类的实例化过程的抽象.一些系统在创建对象时,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表

设计模式学习之Adaptor

设计模式之Adapter(适配器) 适配器模式定义:    将两个不兼容的类纠合在一起使用,属于结构型模式,需要有 Adaptee(被适配者)和Adaptor(适配器)两个身份.为何使用?    我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口. 怎么办?使用 Adapter,在这两种接口之间创建一个混合接口(混血儿).如何使用?实现 Adapter 方式,其实"think in Java&qu

Java设计模式(学习整理)---迭代模式

设计模式之Adapter(适配器) 1.定义: 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 2.为何使用? 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口. 怎么办? 使用Adapter,在这两种接口之间创建一个混合接口(混血儿). 3.如何使用? 实现Adapter方式,其实"think in Java"的&

java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 单一职责原则 开闭原则 里氏替换原则 依赖注入原则 接口分离原则 迪米特原则 单一职责原则 其实就是开发人员经常说的"高内聚,低耦合" 也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 开闭原则 核