這篇文章主要介紹了java設計模式學習之工廠方法模式,具有一定的參考價值,有興趣的小夥伴們可以參考一下
工廠方法模式(Factory Method):定義一個用於建立物件的接口,讓子類別決定實例化哪一個類別。工廠方法使一個類別的實例化延遲到其子類別。
工廠方法模式結構圖:
專案需求,創造一個雷鋒工廠,大學生可以去幫助別人,志工也可以幫助別人做事情。
1:創建一個雷鋒類,具有幫助別人掃地,洗衣,買米的功能。
package FactoryMethodModel; public class LeiFeng { public void Sweep(){ System.out.println("扫地"); } public void Wash(){ System.out.println("洗衣"); } public void BuyRice(){ System.out.println("买米"); } }
2:創建一個學雷鋒的大學生的類,繼承雷鋒類,可增加自己的功能。
package FactoryMethodModel; /** * 学雷锋的大学生 * @author 我不是张英俊 * */ public class UniversityStudent extends LeiFeng { //里面可以增加专属大学生的功能 }
3:創建一個社區志工的類,繼承雷鋒類。
package FactoryMethodModel; /** * 学雷锋的社区人员 * @author 我不是张英俊 * */ public class Volunteer extends LeiFeng { }
4:建立一個雷鋒工廠介面。
package FactoryMethodModel; /**雷锋工厂的总接口。 * @author 我不是张英俊 * */ interface LeiFengFactory { LeiFeng CreatLenFeng(); }
5:創造學雷鋒的大學生的工廠。
package FactoryMethodModel; /** * 学雷锋的大学生工厂 * @author 我不是张英俊 * */ public class UniversityStudentFactory implements LeiFengFactory { @Override public LeiFeng CreatLenFeng() { return new UniversityStudent(); } }
6:創造學雷鋒的志工工廠。
package FactoryMethodModel; /** * 学雷锋的社区制志愿者 * @author 我不是张英俊 * */ public class VolunteerFactory implements LeiFengFactory { @Override public LeiFeng CreatLenFeng() { // TODO Auto-generated method stub return new Volunteer(); } }
7:測試類別
package FactoryMethodModel; /** * 建立一个雷锋工厂,大学生可以以雷锋的名义起帮助别人,社区志愿者也可以。 * 工厂化模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 * 工厂方法使一个类的实例化延迟到其子类。 * @author 我不是张英俊 * */ public class Test { public static void main(String[] args) { LeiFengFactory factory=new UniversityStudentFactory(); LeiFeng student =factory.CreatLenFeng(); student.BuyRice(); student.Sweep(); student.Wash(); } }
8:控制台
買米
掃地
洗衣
總結:簡單工廠方法違背了開放-封閉原則,而工廠方法克服了此問題,當需要增加新的,例如小學生學雷鋒的時候,工廠方法增加新的小學生工廠即可,然後再測試類別中呼叫即可。
工廠方法模式也保持了封裝物件建立過程的有點。使得要更換物件的時候,不需要做打的改動就可以實現,降低了客戶程序與產品物件的耦合,工廠方法模式是簡單工廠模式的進一步抽象與推廣。由於使用了多態性,工廠模式保存了簡單工廠模式的有點,並且克服了缺點。但缺點是,沒增加一個產品,就必須增加一個工廠類,增加的額外的開發量。
以上是Java之工廠方法模式學習的詳細內容。更多資訊請關注PHP中文網其他相關文章!