• 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

    上面就是适配器模式。

  • 相关阅读:
    最简单跨平台的日志库
    linux文件锁
    Linux 获取屏幕分辨率与窗口行列数(c/c++)
    linux 信号机制
    记一次函数异常(getopt_long)
    程序单实例运行
    简单地 Makefile 书写
    学习go的一些笔记
    20200930 10. Netty 核心源码剖析
    20200930 9. TCP 粘包和拆包 及解决方案
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/6592175.html
Copyright © 2020-2023  润新知