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

    适配器模式主要适用于:已有一个类实现功能,但此功能已不能满足于现在客户的需求,需要进行改变,但不能修改原先的方法类。

    适配器模式主要模式有两种:

      1:类适配器

      2,对象适配器

    例如:

    原有接口

    interface DBSocketInterface
    {
    void powerWithTwoRound();
    }

    原实现接口类

    class DBSocket:DBSocketInterface
    {
    public void powerWithTwoRound() {
    Console.WriteLine("使用两项圆头的插孔供电");
    }
    }

    一个使用原方法的实体类

    class Hotel
    {
    private DBSocketInterface dbSocket;

    public Hotel() { }

    public Hotel(DBSocketInterface dbSocket)
    {
    this.dbSocket = dbSocket;
    }

    public void setSocket(DBSocketInterface dbSocket)
    {
    this.dbSocket = dbSocket;
    }


    public void charge()
    {
    dbSocket.powerWithTwoRound();
    }
    }

    想要新增的功能接口

    interface GBSocketInterface
    {
    void powerWithThreeFlat();
    }

    新增功能实现

    class GBSocket : GBSocketInterface
    {
    public void powerWithThreeFlat() {
    Console.WriteLine("使用三项扁头插孔供电");
    }
    }

    如何将新功能添加到实体类中去?

    这是需要建立一个适配器,将新功能添加到原先的接口中,以便于对象的使用

    这是对象适配器的实现方法

    class SocketAdapter : DBSocketInterface
    {
    private GBSocketInterface gbSocket;


    public SocketAdapter(GBSocketInterface gbSocket)
    {
    this.gbSocket = gbSocket;
    }

    public void powerWithTwoRound()
    {
    gbSocket.powerWithThreeFlat();
    }
    }

    在对象适配器实现过程中,需要使用到委托,将适配器中的具体实现GBSocketInterface接口的对象传入适配器中,

    然后在适配器中完成对旧接口的新实现(调用外界传入对象的实现方法(GBSocketInterface ))

    再调用中实现如下

    GBSocketInterface gbSocket = new GBSocket();
    Hotel hotel = new Hotel();

    SocketAdapter socketAdapter = new SocketAdapter(gbSocket);

    hotel.setSocket(socketAdapter);

    hotel.charge();

    类适配器的实现则是在创建类适配器是,具体的实现方法便已经写入到适配器当中,如下

    class SocketAdapter2 : GBSocket, DBSocketInterface
    {
    public void powerWithTwoRound()
    {
    this.powerWithThreeFlat();
    }
    }

    GBSocket类中便有具体的实现方法

    在调用中实现如下

    DBSocketInterface dbSoket = new SocketAdapter2();

    Hotel hotel = new Hotel(dbSoket);

    hotel.charge();

    Console.ReadLine();

    1    适配器对象实现原有接口
    2    适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个接口,只是一个单纯的对象)
    3    对适配器原有接口方法的调用被委托给新接口的实例的特定方法

    在https://blog.csdn.net/zhangjg_blog/article/details/18735243处学得

  • 相关阅读:
    20165204 缓冲区溢出漏洞实验
    2019-2020 1 20175230 实验四 外设驱动程序设计
    2019-2020-1 20175230 实验三 并发程序
    2019-2020-1 20175208 20175218 20175230 实验二 固件程序设计
    2019-2020-1 20175208 20175218 20175230 实验一 开发环境的熟悉
    2018-2019-2 20175230 实验五《网络编程与安全》实验报告
    2018-2019-2 20175230实验四 《Android开发基础》实验报告
    2018-2019 2 20175230《Java程序设计》第十一周学习总结
    2018-2019-2 20175230 实验三《Java面向对象程序设计》实验报告
    MyCP
  • 原文地址:https://www.cnblogs.com/cwmizlp/p/9044830.html
Copyright © 2011-2022 走看看