设计模式(15):JAVA(15):设计模式(8)适配器
时间:2021-09-04
本文章向大家介绍设计模式(15):JAVA(15):设计模式(8)适配器,主要包括设计模式(15):JAVA(15):设计模式(8)适配器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
例1
package com.woniuxy.o_adapter.a; class Calc { public int add(int a, int b) { return a + b; } } // =================================================== // 需求,客户端想要计算3个数字的和,客户端想给add方法,传入3个参数 class CalcAdapter { private Calc c = new Calc(); public CalcAdapter() { } public int add(int x, int y, int z) { return c.add(c.add(x,y), z); } } public class Test { public static void main(String[] args) { CalcAdapter ca = new CalcAdapter(); int r = ca.add(1, 2, 3); System.out.println(r); } }
例2
package com.woniuxy.o_adapter.b; public class WaveForm { private static long counter; private final long id = counter++; public String toString() { return "Waveform " + id; } } class Filter { public String name() { return this.getClass().getSimpleName(); } public WaveForm proccess(WaveForm input) { return input; } } class LowPass extends Filter{ double cutoff; public LowPass(double cutoff) { super(); this.cutoff = cutoff; } @Override public WaveForm proccess(WaveForm input) { return input; // 虚拟处理 } } class HighPass extends Filter{ double cutoff; public HighPass(double cutoff) { super(); this.cutoff = cutoff; } @Override public WaveForm proccess(WaveForm input) { return input; // 虚拟处理 } } class BandPass extends Filter{ double lowCutoff; double highCutoff; public BandPass(double lowCutoff, double highCutoff) { super(); this.lowCutoff = lowCutoff; this.highCutoff = highCutoff; } @Override public WaveForm proccess(WaveForm input) { return input; // 虚拟处理 } }
package com.woniuxy.o_adapter.b; import java.util.Arrays; interface Proccessor { String name(); // 为了当子类向上转型以后,还能调用这个proccess方法,所以才在父类这里定义出这个proccess方法 Object proccess(Object input) ; } abstract class StringProccessor implements Proccessor { @Override public String name() { return this.getClass().getSimpleName(); } } class Upcase extends StringProccessor { public String proccess(Object obj) { return ((String)obj).toUpperCase(); } } class Downcase extends StringProccessor { public String proccess(Object obj) { return ((String)obj).toLowerCase(); } } class Splitter extends StringProccessor { public String proccess(Object obj) { return Arrays.toString(((String)obj).split(" ")); } } class Apply { public static void proccess(Proccessor p, Object s) { System.out.println(p.name()); System.out.println(p.proccess(s)); } } class FilterAdapter implements Proccessor { private Filter filter; public FilterAdapter(Filter filter) { this.filter = filter; } @Override public String name() { return filter.name(); } @Override public Object proccess(Object input) { return filter.proccess((WaveForm)input); } } public class Test { public static void main(String[] args) { String str = "How are you! What's this? This is a desk!"; Apply.proccess(new Upcase(), str); Apply.proccess(new Downcase(), str); Apply.proccess(new Splitter(), str); WaveForm wf = new WaveForm(); Apply.proccess(new FilterAdapter(new LowPass(10)), wf); Apply.proccess(new FilterAdapter(new HighPass(10)), wf); Apply.proccess(new FilterAdapter(new BandPass(10,20)), wf); // Proccessor p = new Upcase(); // System.out.println(p.name()); // System.out.println(p.proccess(str)); // // Proccessor p2 = new Downcase(); // System.out.println(p2.name()); // System.out.println(p2.proccess(str)); // // Proccessor p3 = new Splitter(); // System.out.println(p3.name()); // System.out.println(p3.proccess(str)); } } // 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 //
本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/15227453.html
原文地址:https://www.cnblogs.com/qiu-hua/p/15227453.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Sublime怎么默认显示文件路径
- Git 删除已提交的文件
- Sublime 怎么装SQL语法检测器
- Vue 设置环境变量和模式
- 你真的掌握了Python基本语法了吗?
- Mybatis-Generator 代码生成器的使用
- 提高数据分析工作效率-Sublime如何设置默认打开文件格式
- 使用 freemarker 制作代码生成器
- 假期闲的慌,不如做一点SQL基础练习吧
- Vue 中全局过滤器的使用
- 游戏-CSP201712-2-Java
- Mybatis generator 生成 Mapper 方法不全
- Vue 中使用 JQuery 插件不起作用
- 公共钥匙盒-CSP数组排序练习
- 疫情这么严重,还不待家里学Numpy和Pandas?