初始設計模式3——工廠方法模式

工廠方法模式

工廠方法模式,即定義一個用於創建對象的接口,讓子類決定實例化哪個類。
 //定義抽象產品類
    public abstract class Product{
        public abstract void method();
    }
    //定義具體產品類
    public class ConProduct extends Product{
        public void method(){}
    }
    //定義抽象工廠類
    public abstract class Factory{
        public abstract <T extends Product> T createProduct(Class<T> c);
        //泛型,所有繼承Product的類
    }
    //具體工廠類
    public class ConFactory extends Factory{
        public <T extends Product> T createProduct(Class<T> c){//工廠函數
            Product product=null;
            try{
                product=(Product)Class.forName(c.getName()).newInstance();//內省
            }catch(Exception e){//異常處理}
            return (T)product;
        }
    }
工廠方法模式封裝良好,結構清晰,易於擴展。是典型的解耦框架,高層模塊只需要知道產品的抽象類,符合迪米特法則和依賴倒置原則,只依賴產品類的抽象,也符合里氏替換原則。
工廠方法模式擴展
延遲初始化是工廠方法模式的一個擴展,對象創建後在類內保存引用,在下次創建對象時查找類內是否存在,有則直接取出返回
簡單工廠模式Simple Factory Pattern,去除抽象工廠類,將生產函數設爲static。
多工廠模式,每個具體產品對應一個共產類,類職責清晰,結構簡單,但增加了擴展難度。替代單例模式,符合單一職責原則
public class Singleton{ 
	private Singleton(); 
} 
public class SingletonFactory{ 
	private static Singleton singleton; 
	static{ 
		try{ 
		//通過反射方式創建單例類 
		Class cl = Class.forName(Singleton.class.getName()); 
		//獲得無參構造 
		Constructor con = c1.getDeclaredConstructor(); 
		//設置無參構造可訪問 
		con.setAccessible(true); 
		//產生實例 
		singleton = (Singleton)con.newInstance(); 
		}catch(Exception e){//異常處理} 
	} 
	public static Singleton getSingleton()
	{ 
		return singleton; 
	} 
}

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