中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

設計模式之簡單工廠模式

發布時間:2020-08-09 16:04:12 來源:網絡 閱讀:327 作者:1778161229 欄目:開發技術

先看代碼

class GcFactory
    {
        public void demo() {
            Factory ftFac = new Factory();
            IFactory if1 = ftFac.getInstance("demo1");
            if1.run();
            IFactory if2 = ftFac.getInstance("demo2");
            if2.run();
        }
    }
    interface IFactory {
        public void run();
    }
    class Demo1 : IFactory {

        public void run()
        {
            Console.WriteLine("演示一");
        }
    }
    class Demo2 : IFactory {

        public void run()
        {
            Console.WriteLine("演示二");
        }
    }
    /// <summary>
    /// 創建對象,此對象就是生產IFactory接口的對象的
    /// </summary>
    class Factory {
        //創建IFactory接口實例
        public IFactory getInstance(string obj) {
            if (obj.Equals("demo1"))
            {
                return new Demo1();
            }
            else if(obj.Equals("demo2")){
                return new Demo2();
            }
            return null;
        }
    }

這樣就直接創建了兩個類。

什么是簡單工廠模式?舉個例子,現實中有很多工廠是負責制造產品的,相同的代碼里面的也是生產對象的,而現實中的工廠里面怎么制造的產品,是不需要讓別人知道,別人能知道的就是這個產品本身,不需要制作的過程。代碼里面也一樣,當用new關鍵字創建一個對象時,此時當前類就會密切的與創建的類發生耦合,后期比如修改需求時,這些類都需要去修改,而面向對象的思想其一就是封裝,簡化代碼,這樣的話就不符合面向對象的原則了,出現的這個簡單工廠模式就很好的解決了當前的問題。

優缺點。

工廠模式雖然很好的解決了類與類之間的耦合,但是當new一個對象的時候,后期修改這個對象后,工廠方法里面的對象也要修改,這個就帶來了一定的壞處。使用抽象工廠類就可以解決這個問題。

java和.net的實現方式其實是一樣的。

public class Demo {

	public static void main(String[] args) {
		FactoryImp fimp = new FactoryImp();
		FactoryInter fi = fimp.getInstance("demo1");
		fi.run();
	}
}
interface FactoryInter{
	public void run();
}
class Demo1 implements FactoryInter{
	@Override
	public void run() {
		System.out.println("演示一");
		
	}
}
class Demo2 implements FactoryInter{
	@Override
	public void run() {
		System.out.println("演示二");
		
	}
}
// 創建對象,此對象就是生產IFactory接口的對象的
class FactoryImp{
	//創建IFactory接口實例
	public FactoryInter getInstance(String obj){
		switch(obj){
		case "demo1":
			return new Demo1();
		case "demo2":
			return new Demo2();
		}
		return null;
	}
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长沙市| 马尔康县| 黄石市| 巴中市| 孝义市| 合作市| 紫云| 常熟市| 泽州县| 临沧市| 汾阳市| 邵东县| 延安市| 临夏县| 滁州市| 太康县| 合川市| 加查县| 曲麻莱县| 镶黄旗| 阜城县| 临西县| 察哈| 柏乡县| 叶城县| 若尔盖县| 洛宁县| 英山县| 满洲里市| 中西区| 沅江市| 启东市| 剑川县| 阜宁县| 米林县| 无为县| 淳化县| 抚顺县| 资中县| 专栏| 高密市|