zoukankan      html  css  js  c++  java
  • 结构型模式:适配器模式

    我们可能遇到过这样的问题:我们新买了一个显示器,但是由于电脑是几年以前的,不能直接连上使用,需要在连接的时候,安装一个转接头。

    还有,我们使用的手机充电线有一个大大的头,而不是直接一根线连在手机上,手机上的充电电压一般是5v,9v等,但绝不是220v。

    还有苹果的手机等等,很多时候都会遇到需要转接头的时候。

    在我们软件开发的过程中,比如对某个产品升级,但是还是要兼容原来老的接口,可以使用一个新的类,他可以继承原来的老类也可以使用组合使用老类,保证原来的接口继续受到兼容。这就需要我们现在说的适配器模式。简单的理解,适配器就是一个转接头。

    这是适配模式的关系图。Adaptee类是被适配的类,Adapter2是适配器类,对类Adaptee进行一定的适配,使得Client类可以调用。假设Client是我们的手机,Adapter是手机充电线的变压器,Adaptee则是220v电流。经过Adapter的适配,Client可以使用220v的电来进行充电。看一下代码:

     1 public interface Target {
     2     public void doHandle();
     3 }
     4 
     5 Target的实现类Adapter
     6 public class Adapter extends Adaptee implements Target{
     7 
     8     @Override
     9     public void doHandle() {
    10         super.requst();
    11     }
    12 
    13 }
    14 
    15 public class Adaptee {
    16     public void requst() {
    17         System.out.println("执行了方法");
    18     }
    19 }
    20 
    21 public class Client {
    22     public void test(Target t){
    23         t.doHandle();
    24     }
    25     public static void main(String[] args) {
    26         Client c = new Client();
    27         Target t = new Adapter();
    28         c.test(t);
    29     }
    30 }

    上面是使用继承来实现的,下面将Adapter类和Client类稍加修改,使用组合实现适配器模式:

     1 public class Adapter2 implements Target{
     2 
     3     Adaptee adaptee;
     4     
     5     public Adapter2(Adaptee adaptee) {
     6         super();
     7         this.adaptee = adaptee;
     8     }
     9     
    10     @Override
    11     public void doHandle() {
    12         adaptee.requst();
    13     }
    14 
    15 }
    16 
    17 public class Client2 {
    18     public void test(Target t){
    19         t.doHandle();
    20     }
    21     public static void main(String[] args) {
    22         Client2 c = new Client2();
    23         Adaptee adaptee = new Adaptee();
    24         Target t = new Adapter2(adaptee);
    25         c.test(t);
    26     }
    27 }

    只改变了这两个类,其他类不需要改变。

    因为java是单继承的,继承了Adaptee类之后,就没有办法集成其他类,因此建议使用组合的适配器模式。

  • 相关阅读:
    Django 查询filter 常见查询方法
    Django form表单
    Django的认证系统
    django 中间件
    tricks or tips
    Git
    Paper Reading: A Brief Introduction to Weakly Supervised Learning
    Paper Reading: Dynamic Routing Between Capsules (NIPS 2017)
    Paper Reading: Recombinator Networks: Learning Coarse-to-Fine Feature Aggregation (CVPR 2016)
    Paper Reading: 3D Hand Pose Estimation: From Current Achievementsto Future Goals (CVPR 2018)
  • 原文地址:https://www.cnblogs.com/worsun/p/5878324.html
Copyright © 2011-2022 走看看