探索目的:使用的时候,只需要一次调用就可以完成日常复杂的操作。而工具类的高耦合带来业务代码维护复杂度加大。以 java 的思想对原始工具加以改进。

  有没有比这里尝试的方法更高明的,在 A_Utils、B_Utils 的编写时,还是有一致的代码。


  有两个工具类,实现的方法完全一致,仅仅是成员变量的值不同。多次功能改进后,方法部分变得非常繁杂(功能更加强大)。需要再次升级功能时,面对冗余的代码,感叹耦合带来的烦恼。试解之……

  缩略图

  功能实现:BaseClass 类实现主要功能

package argorutils;

public final class BaseClass {
private String str = "invalid"; public BaseClass(String s) {
str = s;
} public void getIt() {
System.out.println(str);
} public void cutIt() {
System.out.println(new String(str.getBytes(), 0, 1));
}
}

  两个接口:Iua、Iub,为不同的业务设定成员变量

// 接口a
package argorutils; public interface Iua {
public final static String s = "ok";
public final static BaseClass f = new BaseClass(s);
} // 接口b
package argorutils; public interface Iub {
public final static String s = "mask";
public final static BaseClass f = new BaseClass(s);
}

  工具类重新实现:原来的两个工具类重新实现(A_Utils,B_Utils)

// A
package argorutils; public final class A_Utils implements Iua {
public static void getIt() {
f.getIt();
} public static void cutIt() {
f.cutIt();
}
} // B
package argorutils; public class B_Utils implements Iub {
public static void getIt() {
f.getIt();
} public static void cutIt() {
f.cutIt();
}
}

  测试类:

package testpackage;

import org.junit.Test;

import argorutils.A_Utils;
import argorutils.B_Utils; public class Demo { @Test
public void doT() {
B_Utils.getIt();
B_Utils.cutIt(); A_Utils.getIt();
A_Utils.cutIt();
}
}

coupling

java 解耦的更多相关文章

  1. 物联网典型场景之智能家电,使用JOSH技术带来的优势和机会~

    很多人一直问,用JOSH技术如何改变智能家电,有没有真正的必要? 一部分人的观点:我可以用嵌入式C.汇编完成家电的程序,毕竟这些设备的程序很简单: 另一部分的人:智能家电互相的连接都一直有人在做啊,并 ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】

    一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 package com.kdyzm ...

  4. [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. java 使用反射技术解耦

    1.调用的代码 /src/de/test.java package de; public class Test { public static void main(String[] args) { D ...

  6. java 里面耦合和解耦

    百度解释: 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象. 解耦就是用数学方法将两种运动分离开来处理问题. 这是形象搞笑的比喻:完全可以这么想像嘛,有一对热恋中 ...

  7. 设计模式:java及spring观察者模式(有利于代码解耦)

    http://www.cnblogs.com/softidea/p/5716870.html 什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环 ...

  8. Java 9 模块解耦的设计策略

    1. 概述 Java 平台模块系统 (Java Platform Module System,JPMS)提供了更强的封装.更可靠且更好的关注点分离. 但所有的这些方便的功能都需要付出代价.由于模块化的 ...

  9. Java工厂模式解耦 —— 理解Spring IOC

    Java工厂模式解耦 -- 理解Spring IOC 最近看到一个很好的思想来理解Spring IOC,故记录下来. 资源获取方式 主动式:(要什么资源都自己创建) 被动式:(资源的获取不是我们创建, ...

随机推荐

  1. C语言冒泡(起泡)排序与选择排序的循环条件区别

    冒泡排序(写法1): i = 0; i < n-1; ++i{ flag = true; j = 0; j < n-1-i; ++j{//从前面开始冒泡 if( arr[j] < a ...

  2. intelij idea常用功能介绍

    1.查看本地文件修改记录 保存本地修改记录: 可以将system下的LocalHistory保存,到另一个目录,需要的时候保存即可. 2.debbuger查看代码 1)优化设置 2)常用 3.条件断点 ...

  3. CSS3 2D转换 动画

    transform:translate(x,y): 过度  鼠标悬浮 在2s内完成所有变化 div { width:100px; height:100px; background:red; trans ...

  4. java中的线程问题(三)——继承Thread VS 实现Runnable的区别

    从java的设计来看,通过继承Thread或者实现Runnable接口来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thread类本身就实现了Runnable接口,如果一定要说它们有什么区别, ...

  5. java面向对象编程(五)--四大特征之抽象、封装

    1.抽象 我们在前面去定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模版).这种研究问题的方法称为抽象. 2.封装 封装就是把抽象出来的数据和对数据的操作封装在一起 ...

  6. 给a链接跳转后的页面添加class

    $(document).ready(function(){ var test = window.location.href;//获取到当前页面的href // console.log(test); / ...

  7. 王者荣耀交流协会第5次Scrum立会

    开会时间:2017年10月31日下午18:00-18:31  共计31分钟 开会地点:一食堂二楼靠近窗户倒数第四排 今日完成工作进度: 王超同学完成了将生成饼状图原型整合到程序中 立会内容: 添加了新 ...

  8. php批量检测和去掉bom头(转)

    <?php //有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题.以下是批量清除bom头的代码 if (isset ( $_GET ['dir'] )) { //confi ...

  9. 小白学习前端---第二天 HTML的基本属性————1

    一.HTML的属性 1.1基本属性 1.1.1三个基本属性 class    定义类规则或者样式规则 id   定义元素的唯一标识 stype 定义元素的样式声明 1.1.2不含三个基本属性的元素 h ...

  10. MySQL - 常见的存储引擎

    数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据,不同的存储引擎... 存储引擎 数据库存储引擎: 是数据库底层软件组织,数据库管理系统(DBM ...