完全解耦:降低代码的限制性,是同一代码能够用到更多的程序中

1 packageinterfaces.interfaceprocessor;2 import staticnet.mindview.util.Print.print;3

4 interfaceProcessor {5 String name();6 Object process(Object input);7 }8 public classApply{9 public static voidprocess(Processor p, Object s) {10 print("Using Processor "+p.name());11 print(p.process(s));12 }13 }

上述方法代码Apply.process()打印出进程的名字和进程的过程。只要符合此要求的都可以利用这个代码

1 packageinterfaces.interfaceprocessor;2 import static net.mindview.util.Print.*;3

4 public abstract class StringProcessor implementsProcessor {5 publicString name() {6 returngetClass().getSimpleName();7 }8 public abstractString process(Object input);9 public static String s = "if she weights the same as duck";10 public static voidmain(String[] args) {11 Apply.process(newUpcase(), s);12 }13 }14 class Upcase extendsStringProcessor{15 publicString process(Object input) {16 return((String)input).toUpperCase();17 }18 }

在利用Apply.process()方法时,需要一个适配器方法,本例中StringProcessor为字符串适配器,是接口Processor的实现

由于Apply.process()方法接收的参数为Proessor类型,因此必须要一个Processor接口的实现,我们把它称作适配器,该适配器也是接口Processor的实现,这样该适配器的类型也是Processor

这样就可以把该适配器的内容传到Apply.process()方法中(Apply.process(new Upacase(), s))

packageinterfaces.interfaceprocessor;classChacaterPairSwapper{publicString swap(String s) {

StringBuilder sb= newStringBuilder(s);for(int i=0; i

sb.setCharAt(i, c2);

sb.setCharAt(i+1,c1);

}returnsb.toString();

}

}class SwapAdapator implementsProcessor{

ChacaterPairSwapper cps= newChacaterPairSwapper();publicString name() {return ChacaterPairSwapper.class.getSimpleName();

}publicObject process(Object input) {returncps.swap((String)input);

}

}public classE11_Swap {public static voidmain(String[] args) {

Apply.process(new SwapAdapator(), "1234");

}

}

本例也是利用了Apply.process()方法,首先写一个交换一对字符的方法,再写了一个此方法的适配器,使其适配Apply.process()方法

这就是完全解耦,通过适配器,使得更多的代码能够用到同一方法

java完全解耦_java-完全解耦 - osc_bc7dotjc的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java知识理论_JAVA理论知识 - OSC_rnoszD的个人空间 - OSCHINA - 中文开源技术交流社区...

    1. final关键字可以用来修饰什么?分别起什么作用? a) final可以修饰类,这样的类不能被继承. b) final可以修饰方法,这样的方法不能被重写. c) final可以修饰变量,这样的变 ...

  2. java 的“mwq”_java的对象模型 - osc_mwqvsfzo的个人空间 - OSCHINA - 中文开源技术交流社区...

    java中的对象在内存中,究竟是怎样一种存在? 这篇随笔,我们就来一探究竟.可能不够深入,但是我们把理解到位,深入到我们需要的程度这样即可. 先来看下jvm的内存模型: 程序计数器 虚拟机栈和本地方法 ...

  3. java课程总结_Java课程总结 - osc_uyb9f22c的个人空间 - OSCHINA - 中文开源技术交流社区...

    总结:已经学了一个学期的Java,虽然在课堂上面还是很认真的听讲,但在课后,基本上没有复习与巩固,导致感觉没有C语言学的好,最后的面试结果也不是很令人满意.在以后的学习中,要改变学习方式.做什么事都要 ...

  4. java组件介绍_Java组件介绍 - osc_wws45aot的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.String string对象的不变性.被final关键字修饰. 使用charat方法替代startwith/endwith方法(提高性能) 使用buffer(方法同步,性能较差)和builder ...

  5. java 抽奖算法_Java抽奖概率算法 - hejunbinlan的个人空间 - OSCHINA - 中文开源技术交流社区...

    摘要: 序号 奖品名称 奖品编号 抽到的概率 1 再来一次 P1 0.2 2 本站VIP一年 P2 0.1 3 谢谢参与 P3 0.4 4 50金币 P4 0.3 5 Iphone 6 P5 0.0 ...

  6. java io 读取配置文件_java读取配置文件 - tomzhao2008的个人空间 - OSCHINA - 中文开源技术交流社区...

    对于要打包成jar文件来运行来说,用file是会有问题的,下面的程序可以解决这样的问题 1.ReadPropsUtil /** * */ package readproperties; import ...

  7. java动态变量名反射_Java动态性—反射 - Eclipse666的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.什么是动态语言? 程序运行时,可以改变程序的结构或者变量类型:如Python,javaScript function(){ var s="var a=3;var b=4;" e ...

  8. java记录类加载的个数_java类加载过程 - audience_1的个人空间 - OSCHINA - 中文开源技术交流社区...

    java类加载过程: 在我们代码中,一般就一个new的方法,就能够创建一个java的对象类,但在java虚拟机中 1:首先,我们需要判断该类是否已经在方法区中的常量池中有一个类的符号的引用存在,如果该 ...

  9. java枚举变量带括号_java枚举类型 - 墨梅的个人空间 - OSCHINA - 中文开源技术交流社区...

    public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...

最新文章

  1. java基础知识之循环结构与数组
  2. 【Git】认识各种开源协议及其关系
  3. ThinkPHP框架整合phpqrcode生成二维码DEMO
  4. java中异常和集合
  5. SUSE Linux 维护笔记一
  6. Oracle 数据怎么实时同步到 MySQL | 亲测干货分享建议收藏
  7. 【数据结构与算法】循环队列的Java实现
  8. windows证书地址
  9. LeetCode(999)——车的可用捕获量(JavaScript)
  10. java-数组排序--插入排序
  11. 不能将紧实的字段 绑定到_紫光芯城市政配套建设项目样板段预计下月完成
  12. 使用bat脚本创建快捷方式
  13. python自制免费代理IP服务
  14. 计算机双屏竖屏桌面背景6,科技:使用这些双显示屏壁纸让你的桌面变得更加美观...
  15. Brodmann 分区
  16. 19年的桌面KDE的风雨和陪伴,没有什么能够割舍
  17. 邮箱验证(验证码验证)
  18. 【Pytest:Python 单元测试工具学习】
  19. ip地址中斜杠(/)含义
  20. 简单四步提升Pinterest有效销售

热门文章

  1. 基于 C# 的 ETL 大数据并行编程
  2. 跟我一起学Redis之Redis事务简单了解一下
  3. dotNET Core 3.X 使用 Jwt 实现接口认证
  4. 【项目升级】单库、多库、读写分离 · 任你选
  5. .NET Core 3.0愈加成熟,微软将不再把.NET Framework API移植给它
  6. 集群环境下,你不得不注意的ASP.NET Core Data Protection 机制
  7. 《WTM送书活动:向更遥远的星辰大海起航~》
  8. 从“梁漱溟:思考问题有八层境界”所联想到的
  9. .net持续集成测试篇之Nunit文件断言、字符串断言及集合断言
  10. Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】