工厂模式的理解
工廠模式的定義
工廠模式叫虛擬構造,多態工廠,工廠模式就是專門負責將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式。它定義一個用于創建對象的接口,由子類決定實例化哪一個類
用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設計模式之道
?
轉載于:https://blog.51cto.com/10879428/1789744
總結
- 上一篇: Vue学习心得记录之模板语法
- 下一篇: 蒙特卡洛方法学习(二)