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

    上面就是适配器模式。

  • 相关阅读:
    百度面试题:把数组排成最小的数
    面试题:在O(1)时间删除链表结点
    从第一字符串中删除第二个字符串中所有的字符
    在一个字符串中找到第一个只出现一次的字符
    大整数运算
    输出1到最大的N位数
    删除字符串中的数字并压缩字符串
    排列 或组合问题的解法(包含回溯法)
    卡特兰数(Catalan)简介
    编程之美-分层遍历二叉树
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/6592175.html
Copyright © 2011-2022 走看看