工廠模式的理解

工廠模式的定義

工廠模式叫虛擬構造,多態工廠,工廠模式就是專門負責將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式。它定義一個用於創建對象的接口,由子類決定實例化哪一個類

用UML的類圖如下;看附件

工廠方法創建對象的接口,工廠方法把實例推遲到子類

爲了更好的理解工廠模式,我舉一個例子,在一個在一個醫院裏有不同的科室,創建一個醫院接口,實現兩個不同的科室實現醫院的接口,方法是創建新的對象,就是創建不同的醫生對象,然後再創建一個醫生接口,實現不一樣的醫生,在工廠中創建,然後就可以降低對象和對象之間的耦合度,提高了系統的靈活性。可以通過工廠方法調用不同醫生的調度。

工廠模式的優勢

應用程序的實例對象都放在一個地方來進行創建,利於對對象的管理和規劃,對傳值的操作有統一的規劃

在不修改應用程序其他類和參數的情況下類和對象,並對應用程序的持久性有更好的維護和升級

工廠模式的使用場景

1.一個系統應當不依賴於產品類實例被創立,就是實例的改變並不影響其他實例的使用。 
2.這個系統的產品很多的時候,不知道該調用哪一個實例。應該考慮使用工廠模式 
3.同屬於一個實例,應該考慮不同的影響,從而減少依賴 
4.不同的產品以一系列的接口的面貌出現,從而使系統不依賴於接口實現,從而很好地去恪守接口隔離的原則。

例子:

把三好學生的描述作爲例子

首先創建班級接口

public interface IClassFactory {

IStudent CreateStudent();


}

然後創建實現班級接口類

/**

 * 

 * @author lxh

 *

 */


1.public class IClassOneFactory implements IClassFactory {



@Override

public IStudent CreateStudent() {

// TODO Auto-generated method stub

return new Student1();

}


}

2.

public class IClassTwoFactory implements IClassFactory {


@Override

public IStudent CreateStudent() {

// TODO Auto-generated method stub

return new Student2();

}


}

創建接口ISudent

public interface IStudent {

public int SkillOne();

public void SkillTwo();

public void Industry();


}

創建實現類

public class Student1 implements IStudent {


@Override

public int SkillOne() {

// TODO Auto-generated method stub

int ss=11;

System.out.println("刻苦勤奮,勇於創新");

return ss;

}


@Override

public void SkillTwo() {

// TODO Auto-generated method stub

System.out.println("學習努力,有上進心");

}


@Override

public void Industry() {

// TODO Auto-generated method stub

System.out.println("吃苦,勤勞勇敢");

}

public String toString(Object String){

String s="優點1:"+this.SkillOne();

return s;

}


}

學生2:。。。

創建測試類

/**  

 * <h1>工廠模式</h1>  

 * 

 * @author lxh  

 *   

*/  

public class ClientTest {   


   /**

 * <br>工廠方法模式實現時,客戶端需要決定實例化那個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端代碼來進行。  

     * 你想要加的功能,本來是改工廠類的,而現在是修改客戶端。  

     * 

     */  

   public static void main(String[] args) {   

  System.out.println("學生1:");

        IClassFactory factory=new IClassOneFactory();   

       IStudent becility=factory.CreateStudent();   

       becility.SkillOne();   

       becility.SkillTwo();   

       //becility.Industry(); 

       System.out.println("學生2:");

      IClassFactory factory2=new IClassTwoFactory();   

       IStudent industry=factory2.CreateStudent();   

      // industry.SkillOne();   

     //  industry.SkillTwo(); 

      

       industry.Industry();  

   }   

 }  

結果:

學生1:

刻苦勤奮,勇於創新

學習努力,有上進心

學生2:

任勞任怨,是個好學生

通過這個學習,對工廠模式的創建和實現有進一步的實現,對設計模式的簡潔與應用的場景有更好的瞭解,在實踐中應用生活的例子,讓學習更有感覺。發現生活中的美才是學習的最好的詮釋。

應用:

javaweb設計模式之道

 
 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章