设计模式《适配器模式》

2018-07-19  本文已影响0人  天道__

引言

  上一节我们讲过迭代器模式,这节我们说说适配器模式。

示例地址

  Demo地址

类图

image

定义

   适配器模式把一个类的接口变换成客户端所期待的另外一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。

使用场景

  1. 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
  2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
  3. 需要一个统一的输出接口,而输入端的类型不可预知。

适配器模式

  我们都知道,去香港旅游需要换上美元。换美元我们去哪换呢。银行,没错银行不仅能够兑换美元,还可以兑换其他的币种。这里银行就是我们设计模式中的适配器。我们看看怎么实现。

类适配模式

1. 人民币
/**
 * 人民币
 *
 * @author 512573717@qq.com
 * @created 2018/7/23  下午3:53.
 */
public class MoneyRMB {

    public void getRMB(int money) {
        System.out.println("我是" + money + "人民币!!!");
    }
}
2. 美元
/**
 * 美元
 *
 * @author 512573717@qq.com
 * @created 2018/7/23  下午3:57.
 */
public interface IMoneyDollar {
    double getDollar(int money);
}
3. 类适配器(美元转换人民币的适配器)
/**
 * 美元转换人民币的适配器
 *
 * @author 512573717@qq.com
 * @created 2018/7/23  下午4:01.
 */
public class MoneyAdapter extends MoneyRMB implements IMoneyDollar {
    @Override
    public double getDollar(int money) {
        System.out.println("人民币转换美元");
        return money / 6.8;
    }
}
4. Client
  //类适配器
  System.out.println("老王去银行兑换美元");
  MoneyAdapter adapter = new MoneyAdapter();
  double result=adapter.getDollar(100);
  System.out.println("兑换了"+result+"$");

对象适配器

1. 对象适配器(美元转换人民币的适配器)
/**
 * 美元转换人民币的适配器
 *
 * @author 512573717@qq.com
 * @created 2018/7/23  下午5:07.
 */
public class MoneyAdapter implements IMoneyDollar {

    private MoneyRMB mMoneyRMB;

    public MoneyAdapter(MoneyRMB moneyRMB) {
        mMoneyRMB = moneyRMB;
    }

    @Override
    public double getDollar(int money) {
        System.out.println("人民币转换美元");
        return money / 6.8;
    }

    public void getRMB(int money) {
        mMoneyRMB.getRMB(money);
    }
}
2. Client
   // 对象适配器
   System.out.println("老王去银行兑换美元");
   MoneyAdapter adapter = new MoneyAdapter(new MoneyRMB());
   double result = adapter.getDollar(100);
   System.out.println("兑换了" + result + "$");

接口适配器

1. 先定义接口
/**
 * 接口
 *
 * @author 512573717@qq.com
 * @created 2018/7/24  下午2:05.
 */
public interface Port {

    // 网络端口80
    void NET();

    // Tomcat容器端口8080
    void Tomcat();

    // Oracle数据库端口1521
    void Oracle();

    // 文件传输FTP端口21
    void FTP();
}
2. 接口适配器
/**
 * 接口适配器
 *
 * @author 512573717@qq.com
 * @created 2018/7/24  下午2:06.
 */
public class PortAdapter implements Port {
    @Override
    public void NET() {

    }

    @Override
    public void Tomcat() {

    }

    @Override
    public void Oracle() {

    }

    @Override
    public void FTP() {

    }
}
3.聊天适配器
/**
 * 聊天适配器
 *
 * @author 512573717@qq.com
 * @created 2018/7/24  下午2:06.
 */
public class ChatAdapter extends PortAdapter {
    @Override
    public void NET() {
        System.out.println("HTTP ://Hello world!");
    }

    @Override
    public void FTP() {
        System.out.println("FTP:// File upload succeddful!");
    }
}
4. Client
 //接口适配器
 Port port = new ChatAdapter();
 port.FTP();
 port.NET();

总结

上一篇 下一篇

猜你喜欢

热点阅读