李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
接口中的适配器设计模式(一)
Leefs
2019-10-19 PM
1469℃
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
标签云
DataWarehouse
字符串
正则表达式
JavaScript
递归
ClickHouse
持有对象
Livy
SpringBoot
Scala
Typora
Java工具类
BurpSuite
序列化和反序列化
前端
GET和POST
Map
队列
机器学习
SpringCloud
数据结构和算法
Elasticsearch
MyBatis-Plus
Ubuntu
Docker
Stream流
Http
散列
MyBatis
容器深入研究
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞