計(jì)算機(jī)專業(yè)的學(xué)生都要使用電腦,下課需要關(guān)閉電腦 // 計(jì)算機(jī)類 public class Compute
計(jì)算機(jī)專業(yè)的學(xué)生都要使用電腦,下課需要關(guān)閉電腦
//
計(jì)算機(jī)類
public
class Computer
{
public
void
saveCurrentTask
(){
//
do something }
public
void
closeService
(){
//
do something }
public
void
closeScreen
(){
//
do something }
public
void
closePower
(){
//
do something }
public
void close
() {
saveCurrentTask
();
closeService
();
closeScreen
();
closePower
(); } }
26
實(shí)例
2
//
人
public class Person{
private
Computer c;
...
public
void
clickCloseButton
(){
//
現(xiàn)在你要開始關(guān)閉計(jì)算機(jī)
了
,
正常只需
要調(diào)用
close()
方法
即
可
//
但發(fā)現(xiàn)
Computer
方法
都是公開
的
,
于是寫下以下
關(guān)閉的流程
:
c.saveCurrentTask
();
c.closePower
();
c.close
();
//
或是
以下的
操作
c.closePower
();
//
還可能是以下的操作
c.close
();
c.closePower
(); } }
27
實(shí)例
2
//
計(jì)算機(jī)
類
public
class Computer{
private
void
saveCurrentTask
(){ //do something }
private
void
closeService
(){ //do something }
private
void
closeScreen
(){ //do something }
private
void
closePower
(){ //do something }
public
void close
(){
saveCurrentTask
();
closeService
();
closeScreen
();
closePower
();
}
}
根據(jù)迪米特原則,我們需要減少對(duì)象之間的依賴關(guān)系,使得一個(gè)對(duì)象不需要知道太多關(guān)于其他對(duì)象的信息,可以通過中間對(duì)象來進(jìn)行通信。因此,我們可以對(duì)上述代碼進(jìn)行優(yōu)化:
計(jì)算機(jī)類只需要公開一個(gè)關(guān)閉方法,其它方法都設(shè)為私有,由計(jì)算機(jī)類自己來調(diào)用這些私有方法。Person類不需要知道計(jì)算機(jī)類的細(xì)節(jié),只需要調(diào)用計(jì)算機(jī)類的關(guān)閉方法即可。
計(jì)算機(jī)類:
public class Computer {
private void saveCurrentTask() {
//do something
}
private void closeService() {
//do something
}
private void closeScreen() {
//do something
}
private void closePower() {
//do something
}
public void close() {
saveCurrentTask();
closeService();
closeScreen();
closePower();
}
}
Person類:
public class Person {
private Computer c;
...
public void clickCloseButton() {
c.close();
}
}
這樣做可以減少對(duì)象之間的耦合,也方便了代碼的維護(hù)。