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

    上面就是适配器模式。

  • 相关阅读:
    怎样编写一个Photoshop滤镜(1)
    蜂窝状网格的定位方法
    【转载】[TC]飞船动画例子《C高级实用程序设计》
    【完全随笔】用户体验和设计
    在 WinCe 平台读写 ini 文件
    关于携带完整 alpha 通道图标的技术研究
    【转载】When should static_cast, dynamic_cast and reinterpret_cast be used?
    怎样编写一个Photoshop滤镜(3) Scripting Plugins
    配电网WebGIS研究与开发[5]
    配电网WebGIS研究与开发[4]
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/6592175.html
Copyright © 2011-2022 走看看