zoukankan      html  css  js  c++  java
  • Adapter


    /*Adapter
     * Motivation
     * For the changing of the enviorment, we need adapt some object to the new enviroment
     * Intent
     *将一个类的接口转换成用户系统的另一个接口
     */

    其实适配器就好像插盘和插头的组合,客户程序使用模块就象电网只人标准同一的插盘,你的电器是两个头的还是三个头的,或使用110v的或380v的电网不考虑,所以我们就写个东西(其实是为每个被调用模块写个东西),将其可以适应调用者的要求,而不用修改调用者,这里调用者可以是客户程序,也可以是大的系统,对他们的修改往往是不可能的或代价过高的。
        在适配器模式中有类适配器和对象适配器,有人说类适配器不好,当时我也这么认为了,可又看了其它的书,发现其实无论那种适配器,都是不好的,也都是好的,C#中的面向接口编程,以前觉得挺多余的,现在结合适配器想想,面向接口编程其实根本不是编程,我认为是可以说是面向规则管理。尤其是在对象适配器模式中,如果适配器继承与实体类而不是接口,当实体类的结构发生改变后,就有可能导致运行期错误(可能发生错误是书上说的,未实践,但听起来有道理)。同时基础与实体类,就往往依赖实体类的成员变量,而成员变量的含义是否发生改编,或其最初的定义是否和写适配器者的理解是一致的都很难保证。
    class a{  //实体类
    int _a;
    }

    class aadapter:a{
      void a{
         int b = _a;   //比如我们认为_a是整数,但其实定义者其实是把他但自然数处理的,而且以后没准又被定义成了ushort,而假如是继承于接口,接口里只有函数而已
      }
    }

    //适配器模式范例
     using System;
     using System.Collections;
     
     interface IStack
     {
      void push(object item);
      object pop();
      object peek();
     }
     class MyStack: IStack //适配器
     {
      //此时是为对象适配器,
      //c#中不建议使用类适配,类适配其实就是多继承
      ArrayList list; //被失败的对象,对ArrayList实现栈
      public MyStack()
      {
       list = new ArrayList();
      }
      public void push(object item)
      {
       list.Add(item);
      }
      public void pop()
      {
       return list.RemoveAt(list.Count - 1);
      }
      public void peek()
      {
       return list[list.Count - 1];
      }
     }
     /*这是适配器模式的典型用法,将某对象其实也可以认为是个不用你new的类,
      * 但软件的开发,模式应用的目的是要多快好省的写程序
      * 所以只要方向正确就行了
      * 比如 运算符 重载,其实他同样是适配器,但他是将被适配对象作为参数来适配的
      * 所以把握 模式的动机 和 开发的一般规律就可以了,而不用拘泥于形式
      * /

    对象适配器:
     

    类适配器:C#中不建议使用


  • 相关阅读:
    mongodb的sql例子(简单版)
    git上传github上
    git中的版本库,暂存区和工作区
    进程与线程的区别
    mysql 在linux 修改账号密码
    linux 下 yum 安装mysql
    linux 下 修改mysql账号密码
    linux 下开放端口问题
    linux 下安装tomcat
    Ubuntu 配置Tomcat环境(转载)
  • 原文地址:https://www.cnblogs.com/xiachong/p/1433261.html
Copyright © 2011-2022 走看看