建立型模式之簡單工廠模式
阿新 • • 發佈:2018-12-14
工廠模式
- 簡單工廠
- 工廠方法
- 抽象工廠
簡單工廠模式:(Simple Factory pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static Factory Method Pattern);是通過專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。
1. 工廠角色:(SimpleFactory)這是簡單工廠模式的核心,由它負責建立所有的類的內部邏輯,當然工廠類必須能夠被外界呼叫,建立所需要的產品物件。 2. 抽象(IProduct)產品角色:簡單工廠模式所建立的所有物件的父類,注意,這裡的父類可以是介面也可以是抽象類,它負責描述所有例項所共有的公共介面。 3. 具體產品(Concrete Product)角色:簡單工廠所建立的具體例項物件,這些具體的產品往往擁有共同的父類。
簡單工廠模式優點: 直接建立所需例項,無需瞭解物件是如何創造以及如何組織的,有利於整個軟體體系的優化。 簡單工廠模式缺點: 工廠類集中了所有例項的建立邏輯,一旦該工廠出現問題,所有客戶端都將受到牽連。更重要的是違背了“開放封閉原則”。
抽象產品角色:
package com.szxy.LemonSnm;
public interface IFood {
void eat(); //抽象產品 可以吃
}
具體產品角色1(薯條)
package com.szxy.LemonSnm; /* 薯條 */ public class Chips implements IFood{ @Override public void eat() { System.out.println("我們吃到了薯條"); } }
具體產品角色2(麥香雞)
package com.szxy.LemonSnm;
/*
麥香雞
*/
public class McChickn implements IFood {
@Override
public void eat() {
System.out.println("我們吃到了麥香雞");
}
}
工廠角色(麥當勞商店)
package com.szxy.LemonSnm; /* 麥當勞 */ public class McDonlad { public IFood getFood(String name){ switch(name){ case "chip": return new Chips(); case "mcChicken": return new McChickn(); default: System.out.println("不能提供此產品"); return null; } } }
客戶端測試
package com.szxy.LemonSnm;
public class Client {
public static void main(String[] args) {
System.out.println("this is Simple Factory main");
McDonlad mcDonlad = new McDonlad(); //建立麥當勞商店
IFood food = mcDonlad.getFood("chip");//購買薯條
if (food !=null){
food.eat();
}
food = mcDonlad.getFood("mcChicken");//購買麥香雞
if (food !=null){
food.eat();
}
food = mcDonlad.getFood("flsChicken");//購買符離集燒雞
if (food !=null){
food.eat();
}
}
}