看看定義吧
一個(gè)對(duì)象對(duì)其他的對(duì)象要保持最少的了解。
什么是最少的了解呢?應(yīng)該是被調(diào)用類的所能夠提供的public方法多少,如果提供的比較多的話,那么了解相對(duì)就比較多。
為什么要保持最少的了解呢?
其實(shí)最重要的是降低耦合,咱們先看個(gè)例子。
//產(chǎn)品經(jīng)理
class ProductManager{
private Coder coder = new Coder();
public String buildProduct(){
if(!coder.developService()){
return "后臺(tái)開發(fā)出現(xiàn)問題";
}
if(!coder.developClient()){
return "客戶端開發(fā)出現(xiàn)問題";
}
return "產(chǎn)品開發(fā)完成了";
}
}
//程序員
class Coder{
public boolean developService(){}
public boolean developClient(){}
}
//大老板
class Boss{
private ProductManager productManager = new ProductManager();
public void useProduct(){
System.out.println(productManager.buildProduct());
}
}
一個(gè)很簡(jiǎn)單的情景,產(chǎn)品經(jīng)理設(shè)計(jì)好產(chǎn)品之后,讓程序員,進(jìn)行開發(fā),然后大boss去向產(chǎn)品經(jīng)理檢查產(chǎn)品。
產(chǎn)品經(jīng)理:”boss,后臺(tái)出現(xiàn)問題了“
老板:“后臺(tái)具體出現(xiàn)什么問題了?”
產(chǎn)品經(jīng)理:“不知道”
老板:“fk,還不趕緊給我問”
產(chǎn)品經(jīng)理大怒,趕緊換了一種工作方式。
class Coder{
//由原來的boolean換成int,產(chǎn)品經(jīng)理根據(jù)不同的code,知道具體出現(xiàn)什么問題
public int developService(){}
public int developClient(){}
}
一旦coder兩個(gè)方法的返回值改成了int,那么產(chǎn)品經(jīng)理的方法只要引用到boolean的方法都需要進(jìn)行修改,這就是因?yàn)楫a(chǎn)品經(jīng)理對(duì)程序員的工作了解太多了,導(dǎo)致的。
產(chǎn)品經(jīng)理:“boss,你還是招聘一個(gè)CTO吧,我懶得和程序員溝通了,我只要和CTO溝通就行了?!?/p>
//產(chǎn)品經(jīng)理
class ProductManager{
private CTO cto = new CTO();
public boolean check(){
return cto.buildProduct()==null;
}
}
class CTO{
private Coder coder = new Coder();
public String buildProduct(){
switch(coder.developService()){
case 101:
return "錯(cuò)誤原因:XXXX"
case 102:
return "錯(cuò)誤原因:XXXX"
case 103:
return "錯(cuò)誤原因:XXXX"
}
switch(coder.developClient()){
case 101:
return "錯(cuò)誤原因:XXXX"
case 102:
return "錯(cuò)誤原因:XXXX"
case 103:
return "錯(cuò)誤原因:XXXX"
}
return null;
}
}
class Coder{
public boolean developService(){}
public boolean developClient(){}
}
//大老板
class Boss{
private ProductManager productManager = new ProductManager();
private CTO cto = new CTO();
public void useProduct(){
if(!productManager.check()){
System.out.println(cto.buildProduct());
}else{
System.out.println("bingo,開發(fā)完成了!");
}
}
}
看到這里,程序員多了一個(gè)CTO的包裝類,并且產(chǎn)品經(jīng)理只了解CTO的一個(gè)方法,至于CTO怎么管理程序員的開發(fā),他壓根不需要了解,只要告訴我開發(fā)完成了沒有。