亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1066 | 回復(fù): 0
打印 上一主題 下一主題

java工廠模式 [復(fù)制鏈接]

論壇徽章:
2
操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-06-26 22:20:00每日論壇發(fā)貼之星
日期:2015-06-26 22:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-07-08 10:38 |只看該作者 |倒序瀏覽
  1. 1、簡單模式
  2. //所有車的接口  有一個共同改的方法 開車
  3. public interface Car {
  4.     public void drive();
  5. }
  6. //奧迪類  實現(xiàn)car接口因為奧迪車也是車 肯定可以開的嘛
  7. public class Audi implements Car {
  8.     public Audi(){
  9.         System.out.println("生產(chǎn)出一輛奧迪");
  10.     }
  11.     @Override
  12.     public void drive() {
  13.         System.out.println("開奧迪");
  14.     }
  15. }
  16. //寶馬類  實現(xiàn)car接口因為寶馬車也是車 肯定也可以開
  17. public class Bmw implements Car{
  18.     public Bmw(){
  19.         System.out.println("生產(chǎn)出一輛寶馬");
  20.     }
  21.     @Override
  22.     public void drive() {
  23.         System.out.println("開寶馬");
  24.     }
  25. }
  26. //生產(chǎn)車的工廠  該工廠接收一個車名 你只需要告訴他你要生產(chǎn)什么車  就可以生產(chǎn)出對應(yīng)的車出來
  27. public class CarFactory {
  28.     public static Car getCar(String caename){
  29.         if(caename.equals("audi")){
  30.             return new Audi();
  31.         }else if(caename.equals("bmw")){
  32.             return new Bmw();
  33.         }
  34.             return null;
  35.     }
  36. }
  37. //測試
  38. public class Test {
  39.     public static void main(String[] args) {
  40.         //告訴工廠類 你需要生產(chǎn)出一輛奧迪車  那么給昂他傳一個參數(shù)audi進(jìn)去
  41.         Car audi = CarFactory.getCar("audi");
  42.         //就可以生產(chǎn)出奧迪的車 調(diào)用開車的方法就可以開車?yán)?br />
  43.         audi.drive();
  44.         //寶馬類似
  45.         Car bmw = CarFactory.getCar("bmw");
  46.         bmw.drive();
  47.     }
  48. }
  49. 輸出:
  50. 成產(chǎn)出一輛奧迪
  51. 開奧迪
  52. 生產(chǎn)出一輛寶馬
  53. 開寶馬
  54. /**
  55. *2、工廠方法模式
  56. *根據(jù)以上代碼 大家可以發(fā)現(xiàn) 比傳統(tǒng)的new方法  Audi  audi = new Audi();要方便很多 如果說你因為需求 要加一個奔馳的車  那你還要Bnez  benz = new Bnez(); 這樣的**話豈不是很麻煩,用工廠模式的話  客戶端就不用在new對象 將生成對象的細(xì)節(jié)可代碼都交給了工廠管理和實現(xiàn) 你只需要寫一個getObject();方法獲取到你想要的對象就ok了 *囚你要加一輛奔馳的話 只需要寫一個benz的類 實現(xiàn)car接口  然后在工廠類中進(jìn)行添加相應(yīng)的邏輯代碼就好了  
  57. *這種模式雖然好一些 但是囚我們每次要加一個汽車類的話,都要在工廠類里面修改判斷邏輯代碼,還是有一定的局限性,不符合開閉原則,因此我們下面介紹更好一點的方式*:工廠方法模式
  58. */
  59. //首先我們將carFactory工廠類 抽象成一個接口
  60. public interface CarFactory {
  61.     public Car getCar();
  62. }
  63. //然后我們再寫兩個首先該接口的具體工廠類(奧迪和寶馬)
  64. public class AudiFactory implements CarFactory {
  65.     @Override
  66.     public Car getCar() {
  67.         return new Audi();
  68.     }
  69. }
  70.     public class BmwFactory implements CarFactory {
  71.     @Override
  72.     public Car getCar() {
  73.         return new Bmw();
  74.     }
  75. }
  76. //測試
  77. public class Test {
  78.     public static void main(String[] args) {
  79.         //實例化奧迪工廠類
  80.         CarFactory factory = new AudiFactory();
  81.         //調(diào)用奧迪工廠類里面的生產(chǎn)奧迪的方法
  82.         Car audi = factory.getCar();
  83.         audi.drive();
  84.         //寶馬和奧迪一樣
  85.         CarFactory factory2 = new BmwFactory();
  86.         Car bmw = factory2.getCar();
  87.         bmw.drive();
  88.     }
  89. }
  90. 輸出結(jié)果:
  91. 生產(chǎn)出一輛奧迪
  92. 開奧迪
  93. 生產(chǎn)出一輛寶馬
  94. 開寶馬
  95. //這樣的話 奧迪工廠類  就只專注生產(chǎn)奧迪的車 寶馬一樣只生產(chǎn)寶馬車,如果我們需要加奔馳的話 只需要再寫一個上產(chǎn)奔馳的工廠類去實現(xiàn)CarFactory接口  和一個奔馳實///體類實現(xiàn)car接口就好了代碼如下:
  96. public class Bnez implements Car{

  97.     public Bnez() {
  98.         System.out.println("生產(chǎn)出一輛奔馳");
  99.     }
  100.     @Override
  101.     public void drive() {
  102.         System.out.println("開奔馳");
  103.     }
  104. }
  105. public class BnezFactory implements CarFactory{
  106.     @Override
  107.     public Car getCar() {
  108.         return null;
  109.     }
  110. }
  111. //在Test里面調(diào)用:
  112. CarFactory factory = new BenzFactory();
  113. Car benz = factory.getCar();
  114. benz.drive();
  115. /**
  116. *3、抽象工廠模式
  117. *但是大家又會覺得 奧迪和寶馬也不止一種車啊   也有奧迪跑車 和奧迪越野車, 寶馬跑車和寶馬越野車啊 的確這樣 那么以上兩種方就實現(xiàn)不了  因為car這個接口就不能通*用了,他只能生產(chǎn)car,不能生產(chǎn)出跑車和越野車,所以第三種方法 我們需要將car這個接口里面的getCar()方法變成兩個方法(一個上產(chǎn)跑車的方法getPaoche();一個生產(chǎn)越*野車的方法getYueye()) 所以引進(jìn)第三種工廠模式:抽象工廠模式
  118. */
  119. //跑車接口
  120. public interface Paoche {
  121.     public void drive();
  122. }
  123. //越野車接口
  124. public interface Yueye {
  125.     public void drive();
  126. }
  127. //那么這樣的話奧迪車是不是就變成了兩個實體類了 之前只是一個audi這個類 現(xiàn)在變成了 奧迪跑車類和奧迪越野車類  加上寶馬的話就有四個具體實現(xiàn)的類了
  128. //奧迪跑車
  129. public class AudiPaoche implements Paoche {
  130.     public AudiPaoche(){
  131.         System.out.println("奧迪工廠上產(chǎn)出一輛奧迪跑車");
  132.     }
  133.     public void drive() {
  134.         System.out.println("奧迪跑車在路上跑");
  135.     }
  136. }
  137. //奧迪越野車
  138. public class AudiYueye implements Yueye {
  139.     public AudiYueye(){
  140.         System.out.println("奧迪工廠生產(chǎn)出一輛奧迪越野車");
  141.     }
  142.     public void drive() {
  143.         System.out.println("奧迪越野車在路上跑");
  144.     }
  145. }
  146. //寶馬跑車
  147. public class BmwPaoche implements Paoche{
  148.     public BmwPaoche(){
  149.         System.out.println("寶馬工廠生產(chǎn)出一輛寶馬跑車");
  150.     }
  151.     public void drive() {
  152.         System.out.println("寶馬跑車在路上跑");
  153.     }
  154. }
  155. //寶馬越野車
  156. public class BmwYueye implements Yueye {
  157.     public BmwYueye(){
  158.         System.out.println("寶馬工廠生產(chǎn)出一輛寶馬越野車");
  159.     }
  160.     public void drive() {
  161.         System.out.println("寶馬越野車");
  162.     }
  163. }
  164. //生產(chǎn)跑車和越野車的接口
  165. public interface CarFactory {
  166.     public Paoche getPaoche();
  167.     public Yueye getYueye();
  168. }
  169. //生產(chǎn)奧迪的工廠類實現(xiàn)CarFactory
  170. public class AudiFactory implements CarFactory{
  171.     @Override
  172.     public Paoche getPaoche() {
  173.         return new AudiPaoche();
  174. }
  175.     @Override
  176.     public Yueye getYueye() {
  177.         return new AudiYueye();
  178.     }
  179. }
  180. //生產(chǎn)寶馬的工廠類實現(xiàn)CarFactory
  181. public class BmwFactory implements CarFactory {
  182.     @Override
  183.     public Paoche getPaoche() {
  184.         return new BmwPaoche();
  185.     }
  186.     @Override
  187.     public Yueye getYueye() {
  188.         return new BmwYueye();
  189.     }
  190. }
  191. //測試
  192. public class Test {
  193.     public static void main(String[] args) {
  194.         //實例化生產(chǎn)寶馬的工廠類 來上產(chǎn)寶馬跑車和寶馬越野車  寶馬工廠有 生產(chǎn)寶馬跑車和寶馬越野車  這兩個方法  具體是生產(chǎn)跑車還是越野車  看客戶端選擇
  195.         CarFactory factory = new BmwFactory();
  196.         //在這里選擇的是生產(chǎn)跑車  調(diào)用的是上產(chǎn)跑車的方法
  197.         Paoche paoche = factory.getPaoche();
  198.         paoche.drive();

  199.         CarFactory factory2 = new AudiFactory();
  200.         Yueye yueye = factory2.getYueye();
  201.         yueye.drive();
  202.     }
  203. }
  204. 輸出結(jié)果:
  205. 寶馬工廠生產(chǎn)出一輛寶馬跑車
  206. 寶馬跑車在路上跑
  207. 奧迪工廠生產(chǎn)出一輛奧迪越野車
  208. 奧迪越野車在路上跑
  209. //寫了這么多 希望對大家有所幫助吧
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP