李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
接口中的适配器设计模式(一)
Leefs
2019-10-19 PM
2011℃
0条
# 接口中的适配器设计模式 ### 前言 在上一篇文章中提到了解耦,但是并没有做深入的探讨,今天在本篇文章中对解耦做进一步的探讨...... ### 一、代码比较 我们看上一篇中的代码: ```java class Processor { /** * 返回类名 * @return 类名 */ public String name() { return getClass().getSimpleName(); } /** * 返回object对象 * @param input 传入object对象 * @return 返回object对象 */ Object process(Object input) { return input; } } class Upcase extends Processor { String process(Object input) { // Covariant return return ((String) input).toUpperCase(); } } class Downcase extends Processor { String process(Object input) { return ((String) input).toLowerCase(); } } class Splitter extends Processor { String process(Object input) { // The split() argument divides a String into pieces: return Arrays.toString(((String) input).split(" ")); } } public class Apply { public static void process(Processor p, Object s) { System.out.println("Using Processor " + p.name()); System.out.println(p.process(s)); } public static String s = "Disagreement with beliefs is by definition incorrect"; public static void main(String[] args) { process(new Upcase(), s); process(new Downcase(), s); process(new Splitter(), s); } } ``` 如果对上方代码还有疑问的可以看上篇文章[接口中的设计模式](https://lilinchao.com/archives/39.html)。 > 下面我们看下方代码: ```java public class Waveform{ private static long counter; private final long id=counter++; public String toString(){ return "Waveform:"+id; } } ``` ```java public class Filter{ public String name(){ return getClass().getSimpleName(); } public Waveform process(Waveform input){ return input; } } ``` 通过上方代码的比较,我们可以看出**Fileter类与Process类非常相似**,它们具有相同的接口元素,但是因为Process是一个类,Apply中的process方法中的参数传递的是Processor类中的方法,Filter和Processor类并没有继承关系,所以在Filter类中并不能调用 **Apply.process()**方法 **如果我们想在Filter类中调用Apply.process()方法,对代码又该如何处理哪?** + 将Processor类改成一个公共接口 ```java public interface Processor { String name(); Object process(Object input); } ``` + 创建StringProcessor类替代原来的Processor类,并且实现Processor接口 ```java public class StringProcessor implements Processor{ public String name() { return getClass().getSimpleName(); } public Object process(Object input) { return input; } } ``` + 让**Upcase**类、**Downcase**类、**Splitter**类都同时继承**StringProcessor**类 + 让Filter类实现Processor接口 ```java public class Filter implements Processor{ public String name(){ return getClass().getSimpleName(); } @Override public Object process(Object input) { return input; } } ``` **此时,在Filter类中就可以调用Apply.process()方法了**。 但是,你经常碰到的情况是你无法修改你想要使用的类 ......
标签:
Java
,
Java编程思想
,
JavaSE
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/41.html
上一篇
接口中的策略设计模式
下一篇
接口中的适配器设计模式(二)
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
LeetCode刷题
ClickHouse
Eclipse
Filter
Thymeleaf
人工智能
序列化和反序列化
Jenkins
微服务
查找
ajax
JavaSE
散列
SQL练习题
Java工具类
Netty
RSA加解密
CentOS
JavaScript
数据结构和算法
栈
Golang基础
MySQL
递归
Flink
SpringCloudAlibaba
前端
HDFS
正则表达式
Zookeeper
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭