工廠模式學習筆記
阿新 • • 發佈:2018-03-07
private cto 實現類 廠商 @override 人類 rec 工業 ava
人類工業進化史 與 java設計模式
- 石器時代: new Object();
- 小作坊模式: 簡單工廠模式
- 小工廠: 工廠方法模式
- 流水線大廠: 抽象工廠模式
簡單工廠
- 註: 下面都會以手機廠商舉例來理解各個設計模式, 全部代碼會在最後提供下載地址
首先需要一些手機的抽象與實體,以水果X為例
public interface Phone { String getName(); String getOrigin(); }
/** * 水果X */ public class IPhoneX implements Phone{ public IPhoneX(){ } /** * 產地 */ private String origin; public IPhoneX(String origin) { this.origin = origin; } public String getName() { return "IPHONEX"; } @Override public String getOrigin() { return this.origin; } }
簡單工廠模式的實現
/** * 小作坊: 簡單工廠, 啥也能做, 要啥給啥 * 缺點: 啥也能做,修改動靜太大, 不符合開閉原則, 新加一個手機品牌 , 增加對應品牌的實體, 需要修改 * simplefactory中if else的邏輯, 需要測試其整個方法的準確性 * 優點: 從此用戶不用再去new對象,用戶本身不再關心生產的過程,而只需要關心這個結果 */ public class SimpleFactory{ public Phone getPhone(String name) { if(name.equalsIgnoreCase("iphonex")){ return new IPhoneX(); }else if(name.equalsIgnoreCase("xiaomi")){ return new XiaoMi(); }else if(name.equalsIgnoreCase("huawei")){ return new HuaWei(); }else if(name.equalsIgnoreCase("nokia")){ return new Nokia(); }else { return null; } } }
簡單工廠測試
public class SimpleFactoryTest { @Test public void testGetPhone() { SimpleFactory factory = new SimpleFactory(); assertEquals("iphonex",factory.getPhone("iphonex").getName().toLowerCase()); } }
工廠方法實現
抽象的工廠接口
/** * 工廠: * 工廠方法模式: 有了一定的規範, 各個產品都有對應的工廠 * * 工廠必然具有生產產品技能,統一的產品出口 * 適合只做產品, 產品不分族, 如果類似抽象工廠進行分組, 需要創建很多的工廠, DLNOKIAFACTORY、 HKNOKIAFACTORY.... */ public interface Factory { Phone getPhone(); }
工廠實現類
public class IPhoneXFactory implements Factory{ public Phone getPhone() { return new IPhoneX(); } }
工廠類測試
public class FactoryTest { @Test public void testGetPhone() { Factory factory = new IPhoneXFactory(); assertEquals("iphonex",factory.getPhone().getName().toLowerCase()); } }
抽象工廠實現
抽象工廠實現類
/** * 流水線: * 抽象工廠是用戶的主入口, 定義了所有實現工廠能做的產品 * 在Spring中應用得最為廣泛的一種設計模式 * 易於擴展 * 基本的邏輯都抽象出來, 而且可以進行隨意組合, 用戶只能用現有的功能,提高健壯性 * * 適合既做產品, 並且產品分流水線, 分為 大陸\ 港版 * */ public abstract class AbstractFactory { abstract Phone getXiaoMi(); abstract Phone getIPhoneX(); abstract Phone getHuaWei(); abstract Phone getNokia(); }
具體的流水線工廠
/** * 大陸某具體工廠 */ public class DLPhoneFactory extends AbstractFactory{ private final String ORIGIN = "dalu"; Phone getXiaoMi() { return new XiaoMi(ORIGIN); } Phone getIPhoneX() { return new IPhoneX(ORIGIN); } Phone getHuaWei() { return new HuaWei(ORIGIN); } @Override Phone getNokia() { return new Nokia(ORIGIN); } }
抽象工廠測試
/** * 抽象工廠產生倆個實際工廠分別產生自己的產品 */ public class AbstractFactoryTest { @Test public void testGetPhone() { AbstractFactory dlPhoneFactory = new DLPhoneFactory(); assertEquals("iphonex",dlPhoneFactory.getIPhoneX().getName().toLowerCase()); } }
最後附上源碼下載地址:
github地址: [email protected]:offline7LY/designpattern.git
工廠模式學習筆記