Thinking in java-29  解耦合Decouple

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 {

    @Override
    public Object process(Object input) {
        return ((String) input).toUpperCase();
    }
}

class Lowercase extends Processor {

    @Override
    public Object process(Object input) {
        return ((String) input).toLowerCase();
    }
}

class Splitcase extends Processor {

    @Override
    public 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 {

    @Override
    public String name() {
        return this.getClass().getSimpleName();
    }

    @Override
    public Object process(Object input) {
        return ((String) input).toUpperCase();
    }

}

class LowerImpl implements Processor1 {

    @Override
    public String name() {
        return this.getClass().getSimpleName();
    }

    @Override
    public Object process(Object input) {
        return ((String) input).toLowerCase();
    }

}

class SplitImpl implements Processor1 {

    @Override
    public String name() {
        return this.getClass().getSimpleName();
    }

    @Override
    public 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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值