设计模式 工厂模式 从卖肉夹馍说起
轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/24460585
今天繼續設計模式之旅,給大家帶來工廠模式,簡單列一下這個模式的家族:
1、靜態工廠模式
2、簡單工廠模式
3、工廠方法模式
4、抽象工廠模式
是不是覺得,我勒個去,這工廠還能列出這么多分類,哈哈,下面開始各個擊破。
1、靜態工廠模式
這個最常見了,項目中的輔助類,TextUtil.isEmpty等,類+靜態方法。下面開始詳細介紹:略。
2、簡單工廠模式
下面開始談談賣肉夾饃,最近程序員賣肉夾饃很火,啥時候大牛們都去賣了,我等就崛起了,哈哈。
首先你得有個店:RoujiaMoStore
[java]?view plaincopy
然后你得有各種風味的饃饃:
[java]?view plaincopy
[java]?view plaincopy
[java]?view plaincopy
[java]?view plaincopy
現在這樣的設計,雖然可以支持你賣肉夾饃了,但是有點問題,生產饃的種類和你的RoujiaMoStore耦合度太高了,如果增加幾種風味,刪除幾種風味,你得一直修改sellRouJiaMo中的方法,所以我們需要做一定的修改,此時簡單工廠模式就能派上用場了。
我們開始寫個簡單工廠,把產生饃的過程拿出來:
[java]?view plaincopy
然后以組合的方式,讓Store來使用:
[java]?view plaincopy
好了,現在你隨便添加什么種類的饃,刪除什么種類的饃就和Store無關了,就是么~人家只負責賣饃么~ 這就是簡單工廠模式,當然了,大家也都比較熟悉。
3、工廠方法模式
定義:定義一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法模式把類實例化的過程推遲到子類。
好了,看完定義,下面我們用例子來展示。繼續肉夾饃,由于使用了簡單工廠模式,肉夾饃生意那個好啊,所以下載決定去西安開個分店,去北京開個分店。既然有分店了,那總店就是抽象的了:
[java]?view plaincopy
然后在開兩個分店,這里拿一個代碼做演示,其他都一樣:
[java]?view plaincopy
然后就是各個西安口味的肉夾饃了,這代碼就不貼了。可以看出我們把制作肉夾饃的過程以抽象方法的形式讓子類去決定了,對照定義:
1、定義了創建對象的一個接口:public abstract RouJiaMo createRouJiaMo(String type);
2、由子類決定實例化的類,可以看到我們的饃是子類生成的。
可能有人會說,我用簡單工廠模式也行啊,但是如果10來個城市*5種風味/城市,那么豈不是簡單工廠里面需要50多個if,再說人家西安肉夾饃分店就不能有點自己的秘訣,當然由它自己定最好。
好了,方法工廠模式介紹完畢。
4、抽象工廠模式
定義:提供一個接口,用于創建相關的或依賴對象的家族,而不需要明確指定具體類。
這定義有點繞口,算了,還是拿例子來說。繼續賣肉夾饃,咱們生意這么好,難免有些分店開始動歪腦子,開始使用劣質肉等,砸我們的品牌。所以我們要拿錢在每個城市建立自己的原料場,保證高質量原料的供應。
于是我們新建一個提供原料的接口:
[java]?view plaincopy
[java]?view plaincopy
有了原理工廠,那我們稍微修改下RouJiaMo的prepare方法:
[java]?view plaincopy
好了,現在必須用我們官方原料做為原材料了。
現在對比定義:
1、提供一個接口:public interface RouJiaMoYLFactroy
2、用于創建相關的或依賴對象的家族?public Meat createMeat();public YuanLiao createYuanliao();我們接口用于創建一系列的原材料。
好了,最后測試下,我要在西安饃店,買個酸味的嘗嘗:
[java]?view plaincopy
[java]?view plaincopy
哈哈~肉夾饃店的已經建立起來了,兄弟們賣饃去把~記得留個言,給個贊~
總結
以上是生活随笔為你收集整理的设计模式 工厂模式 从卖肉夹馍说起的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 瀚高数据库适配定时框架Quartz
- 下一篇: Blockathon2018(上海)顺利