this.sensor =sensor;
}
public void detectSensor(Sensor sensor){
System.out.println(sensor.read());
}
}
//Sensor 接口
public interface Sensor {
public String read();
}
//HeatSensor
public class HeatSensor implements Sensor{
public String read(){
return "heatSensor";
}
}
//扩充一个Sensor
public class SmokeSensor implements Sensor {
public String read(){
return "smoke";
}
}
10.4 DIP 含义是:1、上层不应该依赖于下层模块,二者都应该依赖于抽象。
2、抽象不应该依赖于细节,细节应该依赖于抽象。
如果如果以电灯为例子,开关可以打开电灯。如果开关直接调用电灯,那么,当
(和 OCP 的例子中有所不同,如果其他物体都继承电灯,也满足 OCP 原则,即可以扩充,
无需修改代码,而 DIP 直接指出了依赖于抽象的意义)
代码如下:
public class Light {
public String turnOn(){
return "Turn on the light";
}
public String turnOff(){
return "Turn off the light";
}
}
public class Switch {
public String Toggle(Light light){
return light.turnOn();
}
}
public class Test {
public static void main(String argv[]){
Switch sw =new Switch();
Light light = new Light();
System.out.println( sw.Toggle(light));
}
// 如果将 TV 作为子类,虽然从程序上可以,但理解不合理。
public class TV extends Light{
public String turnOn(){
return "Turn on the TV";
}
public String turnOff(){
return "Turn off the TV";
}
}
所以,增加一个接口,叫 Switchable
10.5 选择 3 个你最近开发的构件,评估每个构件的内聚类型。
此题目暂时不批。
10.6 选择 3 个……………………………., 评估每个构件的耦合类型。
此题目暂时不批。
10.7 问题领域构件不会存在外部耦合的说法有道理吗?如果你认为没有道理,那么哪种类
型的构件存在着外部耦合?
没有道理。
例如:1) 嵌入式软件应用中的构件,与操作系统耦合
2)数据库应用中 POS 构建,与数据库耦合。
3) 文件传输构件,会和通信功能耦合。
10.8 完成(1)一个细化的设计类;(2)接口描述 (3)该类中包含的某一操作的活动图。
例如,书上的 printJob(Page 197),有 7 个操作,2 个接口。
CheckPriority 的活动图。(注意,批作业的时候,一定要是活动图)