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处学得

  • 相关阅读:
    [转] RISC-V架构介绍
    SiP封装成超越摩尔定律的要塞,日月光/安靠/长电科技谁将赢取IC封装的未来
    OLED中的Demura
    第四次工业革命:人工智能(AI)入门
    星座图的原理与应用
    示波器基本原理之七:示波器的基本测量
    示波器基本原理之六:示波器的基本控制
    示波器基本原理之五:采集模式
    示波器基本原理之四:波形捕获率
    png的故事:隔行扫描算法
  • 原文地址:https://www.cnblogs.com/cwmizlp/p/9044830.html
Copyright © 2011-2022 走看看