先看一段書中的**,類似的**相信很多人、包括我都寫過。因為作為初學者,對於介面的使用一般都會這樣寫。
/**
*乙個介面、簡單定義乙個方法test(string str),輸出給定 的字串
*/public inte***ce api
/***實現類,對介面api的實現
*/public class impl implements api
}//客戶端
public class client
}
針對介面的呼叫,基本上所有人都這樣寫過:api api = new impl();,這樣寫完全沒有語法錯誤,但是卻背離的介面呼叫的出發點和思想。因為impl作為具體的實現類,暴露給了客戶端,客戶端知道了功能的具體實現者是實現類impl,這就破壞了「封裝隔離」。
出於呼叫的需要,允許客戶端知道介面,但不允許其知道介面的具體實現類,如何做到,可以給要呼叫的介面加層「外套」,外套內是要隱藏的細節,外套外是客戶端,兩者通過外套隔離。
打個比方:將一間只有一扇門,沒有窗戶的房子作為乙個工廠車間,它與外界的唯一通道就那扇門。外界不知道車間如何生產產品,但可以通過那扇門取得產品並使用。回到設計模式中,「門」就是我們說的介面,「產品」就是介面定義而由實現類實現的方法,「房子」也就是車間,就是將外部呼叫與內部實現隔離開的隔離體。這就是簡單工廠的思想。
定義: 提供乙個建立物件例項功能但不需關心具體實現的類,返回建立類的介面,客戶端通過該類得到返回的介面,進而可以呼叫介面的方法。(這個解釋不夠抽象,感覺是**級別的,理解有待加深)
下面是簡單工廠模式的示例**:
//介面的定義
public inte***ce api
//介面的實現
public class impl inplements api
}//工廠類 建立api物件,包裝建立細節,返回api物件
public class factory
}//客戶端
public class client
}
在工廠類factory中,通過實現類impl實現api介面,並返回得到的api物件,對於客戶端,想要使用operation()方法,只需要通過factory類得到乙個api物件即可,對於介面api的具體實現,是完全被隱藏的,這就將客戶客戶端的呼叫與介面的具體實現隔離開。達到封裝隔離的目的。
上面的示例是只有乙個實現類的簡單示例,目的只是闡述簡單工廠模式的思想,並未涉及簡單工廠中其他知識。
java簡單工廠設計模式
1.概念 就是建立乙個工廠類,對實現了某乙個介面的的一些類進行例項的建立,其實質是根據傳入的引數,動態判斷應該建立 哪乙個產品類的例項。2,舉例 寫乙個娃娃的介面,有兩個產品類,乙個是布娃娃,乙個是芭比娃娃,由工廠物件決定建立出哪乙個類的例項。娃娃介面 娃娃 inte ce doll布娃娃 和 芭比...
java設計模式 簡單工廠模式
大話設計模式 第一章 package ch01 public abstract class operation public void setnumbera double numbera public double getnumberb public void setnumberb double n...
java設計模式 簡單工廠模式
簡單工廠模式 所謂的工廠模式就是用乙個類專門來建立物件,建立的類有共同的父類。簡單工廠模式的實質是建立乙個工廠類的方法,通過其引數傳入要建立的類。然後將其建立出來。在簡單工廠模式中,工廠類是整個模式的關鍵,其包含必要的判斷邏輯,能夠根據外界給定的資訊,決定究竟建立哪個類的例項,外界可以不用去關注物件...