zoukankan      html  css  js  c++  java
  • Adapter模式

    适配器模式,又称包装器(wrapper)模式,顾名思义,就是将类进行包装,然后适应新的需求,书中举的例子比较恰当,就是用电脑的电源转换器来举例子,书中举得例子是打印的例子:

    1,target:

    要实现的目标,就是电源能够正常的工作

    2,adapter

    转换器,将220V的电压转换为10v可工作的电压

    3,current

    现状,220v电压

    实现的思路有两个,一个是继承,另外一个是委托

    先说第一种方法,继承:

    思路:adapter要继承current类,这样才可以获取当前的方法,同时,要实现target接口,这样我们可以通过新建一个用adapter实现target的接口。

    代码如下

    target

    package ModelAdapter;
    
    public interface Printer {
        public abstract void printWeak(String str);
        public abstract void printBold(String str);
    }
    target

    adapter

    package ModelAdapter;
    
    public class PrintBaner extends Baner implements Printer{
    
        public void printWeak(String str) {
            showWeak(str);
        }
    
        public void printBold(String str) {
            showBold(str);
        }
    
    }
    adapter

    current

    package ModelAdapter;
    
    public class Baner {
        public void showWeak(String str){
            System.out.println("("+str+")");
        }
        public void showBold(String str){
            System.out.println("******"+str+"**********");
        }
    }
    current

    测试方法main类

    package ModelAdapter;
    
    public class Main {
    
        public static void main(String[] args) {
            Printer p = new PrintBaner();
            p.printBold("hello, world");
            p.printWeak("who are you?");
        }
    
    }
    main

    这里采用的是新建的接口为adapter实现的接口,这样实际调用的方法就是适配器的方法

    第二种方案就是使用委托

    什么是委托呢?顾名思义,就是根据将操作委托给别人来实行,这里,就是将target的操作委托给current进行操作,具体的如下

    此时的adapter就是一个委托,具体的代码如下

    package ModelAdapter;
    
    public class PrintDelegete implements Printer {
        private Baner baner;
        public void printWeak(String str) {
            baner.showWeak(str);
        }
    
        public void printBold(String str) {
            baner.showBold(str);
        }
    
    }
    adapter delegate

    上面就是适配器模式。

  • 相关阅读:
    JSP内置对象
    Angular $scope和$rootScope事件机制之$emit、$broadcast和$on
    Ionic开发实战
    Entity Framework 5.0 Code First全面学习
    6个强大的AngularJS扩展应用
    使用npm安装一些包失败了的看过来(npm国内镜像介绍)
    自己家里搭建NAS服务器有什么好方案?
    自己动手制作CSharp编译器
    使用Visual Studio Code搭建TypeScript开发环境
    Office web app server2013详细的安装和部署
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/6592175.html
Copyright © 2011-2022 走看看