Design Pattern Explain 读书笔记三——Adapter

What?

Convert the interface of a class into another interface

that the clients expect. Adapter lets classes work together

that could not otherwise because of incompatible inter-

faces. ——GOF

先来个例子:

比如我接到需求要开发一套图形系统,于是我设计

统一接口(为了多态性)Shape,

Shape接口的行为是: display()

其中有一些实现类如,Squares等等

package com.adapter;
public interface Shape {

    void display();

    // ....

}
package com.adapter;
public class Squares implements Shape {

    @Override
    public void display() {
        System.out.println("Squares");
    }
    // ....
}

当我在设计圆这一实现的时候,发现小王已经写过了这个实现,并且逻辑完全一致,那聪明的我当然要复用了。但是,他的接口、方法参数各种不一致,难道我要改动?!怎么用?于是我想使用Adapter,来复用小王的实现,同时满足我的代码设计结构,让客户端依旧使用Shape接口。

package com.adapter;

import com.adaptee.SpecialCircle;
import com.adaptee.SpecialShape;

/**
 * this is Adapter
 *
 */
public class Circle implements Shape {

    /*
     * this is Adaptee
     */
    SpecialShape speicalCircle = new SpecialCircle();

    @Override
    public void display() {
        speicalCircle.displaySpecial();
    }
}
package com.adapter;

public class Client {

    public static void main(String[] args) {

        Shape shape = new Circle();

        /**
         * client完全不用管底层到底是怎么回事,依旧通过Shape去统一处理
         */
        shape.display();

    }

}

UML图:

这是两种典型adapter设计模式的一种:对象Adapter。

适配对象:(Shape)Circle;

被适配对象:(SpecialShape)SpecialCircle

The Adapter Pattern: Key Features

Intent : Match an existing object beyond your control to a particular interface.

Problem : A system has the right data and behavior but the wrong interface. Typically used when you have to make something a derivative of an abstract class we are defining or already have.

Solution : The Adapter provides a wrapper with the desired interface.

Participants and Collaborators

The Adapter adapts the interface of an Adaptee to match that of the Adapter’s Target (the class it derives from). This allows the Client to use the Adaptee as if it were a type of Target.

Consequences : The Adapter pattern allows for preexisting objects to fit into new class structures without being limited by their interfaces.

Implementation : Contain the existing class in another class. Have the containing class match the required interface and call the methods of the contained class.

两种adapter的典型UML图:

有了adapter设计模式,不必去担心现有代码中类的接口问题了。如果需要使用一个类就可以用adapter的设计模式去给这个类包装出一个正确的接口。

Adapter与Facade的比较:

相同:都是将老的系统包装起来。都是在新接口中复用老的系统代码。

不同:Adapter要做的是将一个错误的已经存在的接口转化为目前新的接口,我调新的接口也同样做老的事情(而且代码复用)。Facade纯粹是通过组合单纯的整合、复用老的系统代码。

总之:

Facade简化系统,而Adapter是一个已有接口转化为另一个新接口。

How

见代码实例。也就是说,你想用Shape接口去做SpecialShape的事情——SpecialCircle。但是你无法直接使用SpecialShape.SpecialCircle,因为你的设计是Shape接口。所以你用Adapter模式解决问题。

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

Design Pattern Explain 读书笔记三——Adapter的相关文章

Design Pattern Explain 读书笔记三——Facade

哎,刚写了一篇文章,保存草稿,关闭浏览器,再次登录发现文章没了!服了CSDN,一堆bug!已经不是第一次了!垃圾CSDN. 这篇文章就不详细写了,留个纪念! 版权声明:本文为博主原创文章,未经博主允许不得转载.

Design Pattern Explain 读书笔记一 重新认识面向对象|规范使用UML

新视角看面向对象 与 UML图 什么是内聚性 closely the operations in a routine are related. 就是一个类中,各个方法之间的联系的紧密程度. 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高. 所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则. 低内聚就是说一个类中各个方法直接没有关系,最极端的例子就是,这个类中的方法几乎与系统中所有的东西纠缠在一起. 高内聚

Design Pattern Explain 读书笔记二—— Facade 模式

what? Provide a unified interface to a set of interfaces in a sub- system. Facade defines a higher-level interface that makes the subsystem easier to use. --GOF 给子系统中的一堆接口提供一个统一,标准的接口--更高层次的接口--这样使得子系统更易于使用. Facade模式的特点: 对应的译文: 意图: 希望简化原有系统的使用方式.需要定义

Design Pattern Explain 读书笔记二——设计模式序言

设计模式的由来: 20 世纪 90 年代初,一些聪明的开发人员偶然接触到 Alexander(Christopher Alexander 的建筑师) 有关模式的工作.他们很想知道,在建筑学成立的理论,是否在软件设计中也适用. ● 软件中是否存在不断重复出现.可以以某种相同方式解决的问题? ● 是否可能用模式方法来设计软件,即先找出模式,然后根据这些模式 创建特定的解决方案? GoF 自己并没有创造书中的模式,认识到这一点很重要.相反,他们只是 将软件界已经存在的.反映了(针对各种具体问题的)优秀

Design Pattern Explained 读书笔记四——Strategy

What? Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it. --GOF 定义一系列算法,封装每一个,并且使每个封装是可相互替换的.Strategy模式,做到了 以独立于使用这些算法的客户端的方式 , 替换这一系列算法算法.自由

《你必须知道的.NET》读书笔记三:体验OO之美

一.依赖也是哲学 (1)本质诠释:"不要调用我们,我们会调用你" (2)依赖和耦合: ①无依赖,无耦合: ②单向依赖,耦合度不高: ③双向依赖,耦合度较高: (3)设计的目标:高内聚,低耦合. ①低耦合:实现最简单的依赖关系,尽可能地减少类与类.模块与模块.层次与层次.系统与系统之间的联系: ②高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离: (4)控制反转(IoC):代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖: (5)依赖注入(DI): ①

《世界是数字的》读书笔记 三

<世界是数字的>读书笔记 三 第六章 软件系统 操作系统是软件中的基础层,他负责管理计算机硬件,并为其他被称作应用程序的程序运行提供支持. 6.1操作系统 操作系统控制和分配计算机资源.首先,他负责管理CPU,调度和协调当前运行的程序.操作系统通常都需要管理数十个同时运行的进程或任务. 其次,操作系统管理RAM.他把程序加载到内存中以便执行指令. 最后,操作系统管理和协调外接设备的活动. 6.2操作系统怎么工作 计算机启动时首先要加载代码,加载的过程中还要检查硬件,比如哪些设备已经接入电脑,,

悟道—位IT高管20年的职场心经(读书笔记三)

悟道--一位IT高管20年的职场心经 第三章 世事洞明皆学问 职场就是你的大半个世界 是你一辈子也读不完的一大本书 想明白一个道理, 看明白一件事儿, 你就向成功迈进了一步. 1.1  "四行"说 四行是指: 第一,  你自己得行.自己的基础的能力是必须的,得靠自己学习. 第二,  得有人说你行.需要有伯乐,实际上是你得有一个自己的圈子,并且这些人都人认同你. 第三,  说你行的人得行.自己周围的圈子,里面也必须有牛人,只有在牛人的范围内,才能突显你自己的才能. 第四,  你身子骨得行

《R实战》读书笔记三

第二章  创建数据集 本章概要 1探索R数据结构 2使用数据编辑器 3数据导入 4数据集标注 本章所介绍内容概括如下. 两个方面的内容. 方面一:R数据结构 方面二:进入数据或者导入数据到数据结构 理解数据集 一个数据集通常由一个表格组合而成,行表示观测,列表示变量.病人的数据集如表1所示. 表1 病人数据集 数据集能够反映数据结构.数据类型和内容. 数据结构 R数据结构如图2所示. 图2:R数据结构 数据结构即数据的组织方式,R数据结构包括向量.矩阵.数组.数据框和列表等. R向量 R向量是一