zoukankan      html  css  js  c++  java
  • 适配器模式

    适配器模式的定义

    适配器模式(Adapter Pattern)的定义如下:

    Convert the interface of a class into another interface clients expect.Adapter lets classes work

    together that couldn't otherwise because of incompatible interfaces.(将一个类的接口变换成客户

    端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。)

    适配器模式又叫做变压器模式,也叫做包装模式(Wrapper

    ● Target目标角色

    该角色定义把其他类转换为何种接口,也就是我们的期望接口

    ● Adaptee源角色

    你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对

    象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。

    ● Adapter适配器角色

    适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建

    立的,它的职责非常简单:把源角色转换为目标角色,怎么转换?通过继承或是类关联的方

    式。

    目标角色

    public interface Target {

         //目标角色有自己的方法

         public void request();

    }

    目标角色是一个已经在正式运行的角色,你不可能去修改角色中的方法,你能做的就是

    如何去实现接口中的方法,而且通常情况下,目标角色是一个接口或者是抽象类,一般不会

    是实现类。

    目标角色的实现类

    public class ConcreteTarget implements Target {

         public void request() {

                 System.out.println("if you need any help,pls call me!");   }

    }

    源角色也是已经在服役状态(当然,非要新建立一个源角色,然后套用适配器模式,那

    也没有任何问题),它是一个正常的类

    源角色

    public class Adaptee {

         //原有的业务逻辑

         public void doSomething(){

                 System.out.println("I'm kind of busy,leave me alone,pls!");

         }

    }

    适配器角色

    public class Adapter extends Adaptee implements Target {

         public void request() {

                 super.doSomething();

         }

    }

    场景类

    public class Client {

         public static void main(String[] args) {

                 //原有的业务逻辑

                 Target target = new ConcreteTarget();

                 target.request();

                 //现在增加了适配器角色后的业务逻辑

                 Target target2 = new Adapter();

                 target2.request();

         }

    }

    适配器模式的优点

    ● 适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定

    他们就成。

    ● 增加了类的透明性

    ● 提高了类的复用度

    源角色在原有的系统中还是可以正常使用,而在目标角色中也可以充当新的演员。

    ● 灵活性非常好

  • 相关阅读:
    试试用有限状态机的思路来定义javascript组件
    利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境
    利用bootstrap的modal组件自定义alert,confirm和modal对话框
    利用轮播原理结合hammer.js实现简洁的滑屏功能
    等高分栏布局小结
    圣杯布局小结
    浏览器缓存知识小结及应用
    基于淘宝弹性布局方案lib-flexible的问题研究
    淘宝弹性布局方案lib-flexible实践
    Js位置与大小(1)——正确理解和运用与尺寸大小相关的DOM属性
  • 原文地址:https://www.cnblogs.com/future-zmy/p/6284390.html
Copyright © 2011-2022 走看看