1. 耦合和内聚Couple & cohesion

stackoverflow上有关于该问题的Q&A.

Coupling-耦合:对于一个系统,如果改变一个单元时必须改变另一个单元的情形,我们称之为耦合。
Cohesion-内聚:测试一个单元是否时内聚的标准是,该单元是否完成一个独立的有意义的功能。
高内聚合低耦合是好的设计的标准。

2. Decoupling解耦合

  • 继承方式:当修改时只需作用于扩展类,不必每个都做改动。
package com.fqyuan.thinking;import java.util.ArrayList;
import java.util.Arrays;abstract class Processor {public String name() {return this.getClass().getSimpleName();}public abstract Object process(Object input);
}class Uppercase extends Processor {@Overridepublic Object process(Object input) {return ((String) input).toUpperCase();}
}class Lowercase extends Processor {@Overridepublic Object process(Object input) {return ((String) input).toLowerCase();}
}class Splitcase extends Processor {@Overridepublic Object process(Object input) {return Arrays.toString(((String) input).split(" "));}
}class ExtendUtil {public static void test(Processor p, Object s) {System.out.println("Using processor " + p.name());System.out.println((String) (p.process(s)));}
}public class ExtendDecouple {public static void main(String[] args) {String str = "Valar Morghulis, Valar Dohaeris";ArrayList<Processor> list = new ArrayList<>();list.add(new Uppercase());list.add(new Lowercase());list.add(new Splitcase());for (Processor p : list)ExtendUtil.test(p, str);}
}
//Running result:
Using processor Uppercase
VALAR MORGHULIS, VALAR DOHAERIS
Using processor Lowercase
valar morghulis, valar dohaeris
Using processor Splitcase
[Valar, Morghulis,, Valar, Dohaeris]
  • 实现方式:类似,语法机制不同。
package com.fqyuan.thinking;import java.util.ArrayList;
import java.util.Arrays;interface Processor1 {String name();Object process(Object input);
}class UpperImpl implements Processor1 {@Overridepublic String name() {return this.getClass().getSimpleName();}@Overridepublic Object process(Object input) {return ((String) input).toUpperCase();}}class LowerImpl implements Processor1 {@Overridepublic String name() {return this.getClass().getSimpleName();}@Overridepublic Object process(Object input) {return ((String) input).toLowerCase();}}class SplitImpl implements Processor1 {@Overridepublic String name() {return this.getClass().getSimpleName();}@Overridepublic Object process(Object input) {return Arrays.toString(((String) input).split(" "));}}class ImplUtil {public static void test(Processor1 p, Object s) {System.out.println(p.name());System.out.println(p.process(s));}
}public class ImplementDecouple {public static void main(String[] args) {String str = "Valar Morghulis, Valar Dohaeris";ArrayList<Processor1> list = new ArrayList<>();list.add(new UpperImpl());list.add(new LowerImpl());list.add(new SplitImpl());for (Processor1 p : list)ImplUtil.test(p, str);}}
//Running result:
UpperImpl
VALAR MORGHULIS, VALAR DOHAERIS
LowerImpl
valar morghulis, valar dohaeris
SplitImpl
[Valar, Morghulis,, Valar, Dohaeris]

Thinking in java-29  解耦合Decouple相关推荐

  1. Spring底层控制反转解耦合(IOC)

    简单的例子解释IOC控制反转进行解耦合 一.相关概念 (1)解耦合 解耦合就是把程序中互相不相关或有限相关的模块分割开来,把不同模块互相之间的关系用接口进行准确定义,解耦前,两个模块之间共享所有信息: ...

  2. 存储计算解耦合,构建中国人英语语音数据库

    简介: 通过阿里云为流利说量身打造的数据湖解决方案,解决了流利说多种应用的各类数据的统一存储,帮助流利说构建数据规模高达上千亿的"中国人英语语音数据库". 公司介绍 流利说是世界领 ...

  3. java8编程开发入门 李兴华_李兴华系列--JAVA详解视频(jdk1.8)及项目实战教程

    李兴华系列--JAVA详解视频教程(jdk1.8)有源码+文档01_<Oracle从入门到精通> 02_<Java8编程入门> 03_<Java8面向对象编程> 0 ...

  4. 如何用解耦合提升开发效率?闲鱼团队有了新发现

    阿里妹导读:在业务开发的过程中,往往存在平台代码和业务代码耦合严重难以分离.业务和业务之间代码交织缺少拆解的现象.平台和业务代码交织导致不易修改,不同业务的代码交织增加了不同负责团队之间的协同成本.因 ...

  5. 架构整洁之道(三)-解耦合与复用

    一.为什么要解耦合 前面说到,好的架构是要花费最少的人力成本来构建和维护软件. 对应到写代码上,有两个关键点. 维护的时候,每次修改尽可能少的代码. 维护的时候,每次修改或者添加功能,工程师要少做决策 ...

  6. Java详解剑指offer面试题50--第一个只出现一次的字符

    Java详解剑指offer面试题50–第一个只出现一次的字符 找出字符串中找出第一个只出现一次的字符,比如输入"abacceff",则输出'b' 要想知道某个字符是不是只出现了一次 ...

  7. java中解压tar.gz文件

    在开发中我们经常需要对gz文件进行解压缩,在java中解压gz文件还是比较繁琐的,为此写了一个工具类方便需要的时候可以直接拿过来用.代码如下: package com.eggsl.utils;impo ...

  8. java 文件解压到指定目录

    java 文件解压到指定目录是和压缩文件相反的操作,直接上测试代码: 1.工具类代码: /*** 解压文件到指定目录*/@SuppressWarnings("rawtypes")p ...

  9. java代码解压rar文件时报错,badRarArchive

    针对java代码解压rar文件时报错浅谈 1.针对所报的异常: de.innosystec.unrar.Archive setFile 警告: exception in archive constru ...

  10. JAVA2块钱瓶子_啤酒2元一瓶,4个瓶盖换一瓶,2个空瓶换一瓶,问:10元钱可以喝几瓶。用java编程解出答案,求大神们帮忙...

    点击查看啤酒2元一瓶,4个瓶盖换一瓶,2个空瓶换一瓶,问:10元钱可以喝几瓶.用java编程解出答案,求大神们帮忙具体信息 答:package test;public class Test {publ ...

最新文章

  1. winform 系统托盘程序
  2. python中如何调用java_在Python程序中调用Java代码的实现
  3. java-unrar-0.3.jar_unrar.jar解压缩rar文件
  4. Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记
  5. CentOS 6.6编译安装Squid 配置反向代理服务器
  6. Winform开发框架重构总结
  7. 云服务器开启ftp_FTP是什么?FTP和虚拟主机的关系
  8. 18-switch语句
  9. 2021年中国少儿编程行业报告
  10. 如何判断基因组的重复区域_利用宏基因组数据组装巨病毒基因组的优势与限制...
  11. php根据类名字符串,PHP 5.5 新特性 ::class 获取类名字符串
  12. HDU 1213 How Many Tables 并查集 水~
  13. SQL本地事务、asp.net事务、DTC
  14. 特殊时期,找工作的 9 点建议!
  15. android 汉字临摹,学汉字学笔顺APP
  16. java 华氏温度转换为摄氏温度
  17. CDH5 安装需求和相关软件支持的版本信息
  18. 10min快速回顾C++语法(六)函数专题
  19. Apache NiFi简介
  20. 吉林警方重击涉黑涉恶犯罪 一年打掉439个团伙

热门文章

  1. 现场总线---can总线
  2. Linux Kernel Makefiles(转)
  3. embed实现PDF文件预览
  4. SAP官方培训课程级别和PA认证介绍
  5. 马云:我是信念坚定的人
  6. iphone6s读写速度测试软件,iPhone6S/7/8运行iOS13速度测试:结果有点失望
  7. python的拼音_python 汉字按拼音排序
  8. 小熊的十万个为什么?
  9. dedecms教程:龙书浩最新DedeCmsV5.7建站仿站VIP视频教程免费下载
  10. Android基础Activity篇——创建一个活动(Activity)