设计模式学习--------3.简单工厂模式学习
場景:
? ? ? ?服務端編寫API方法供客戶端調(diào)用,需要將接口與實現(xiàn)分離,客戶端不需要知道具體實現(xiàn),高度解耦,面向接口的編程。
定義:
? ? ? ? 提供一個創(chuàng)建對象實例的功能,而無須關心其具體實現(xiàn),被創(chuàng)建實例的類型可以是接口,抽象類,也可以是具體的類。
類比就像我們?nèi)スS進貨,但是不知道具體貨物是如何產(chǎn)生的,可能從廣東進貨,也可能從北京進貨,原料的供貨商我們不清
楚,我們只向工廠要,工廠知道貨物從哪兒來,由工廠負責具體的調(diào)度,然后貨到了就給我們.
角色:
Api: 定義客戶所需要的功能接口??
package com.kris.study;public interface Api {public void operation(String s); }? ??
Impl:具體實現(xiàn)Api的實現(xiàn)類,可能有多個
package com.kris.study;public class ImplA implements Api{@Overridepublic void operation(String s) {System.out.println("implA s :"+s);}}?
package com.kris.study;public class ImplB implements Api{@Overridepublic void operation(String s) {System.out.println("ImplB s:"+s);}}Factory:工廠,選擇合適的實現(xiàn)類來創(chuàng)建Api接口對象
package com.kris.study;public class Factory {enum Condition {IMPLA,IMPLB}public static Api createApi(Condition condition){Api api = null;if(condition == Condition.IMPLA){api = new ImplA();}else if (condition == Condition.IMPLB){api = new ImplB();}return api;} }Client:客戶端,通過Factory來獲取Api接口對象,然后面向Api接口編程
package com.kris.study;import com.kris.study.Factory.Condition;public class Client {public static void main(String[] args) {Api api = Factory.createApi(Condition.IMPLA);api.operation("lisi");}}
原理分析:
簡單工廠內(nèi)部主要的實現(xiàn)功能是選擇合適的實現(xiàn)類。也就是需要一個選擇條件或者參數(shù),通常來源有三處
①.Client傳入,客戶端必須知道具體參數(shù)含義.
②.配置文件傳入,比如獲取XML中配置的實現(xiàn)類的名字通過反射得到具體實現(xiàn)類。
③.程序運行期的某個值,比如從緩存中獲取的值。
優(yōu)點:
封裝解耦
缺點:
增加了客戶端的復雜度,如果是Client傳入,Client端就需要具體的含義和對應的實現(xiàn)類.可以使用IOC配置文件傳入解決。
不方便擴展。
思考:
簡單工廠將變化的地方交給工廠Factory來處理,使客戶端和實現(xiàn)類解耦.難點在于如何選擇,也就是傳入?yún)?shù)的方式。
?
轉載于:https://www.cnblogs.com/krislight1105/p/3748302.html
總結
以上是生活随笔為你收集整理的设计模式学习--------3.简单工厂模式学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】TCP的SEQ和ACK的生成
- 下一篇: 23个经典JDK设计模式(转)