多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 設計模式:工廠方法模式

設計模式:工廠方法模式

來源:程序員人生   發布時間:2015-01-16 08:18:37 閱讀次數:3606次

原文地址:http://leihuang.org/2014/12/03/factory-method/

Creational 模式

物件的產生需要消耗系統資源,所以如何有效力的產生、管理 與操作物件,1直都是值得討論的課題, Creational 模式即與物件的建立相干,在這個分類下的模式給出了1些指點原則及設計的方向。下面羅列到的全屬于Creational 模式

  • Simple Factory 模式
  • Abstract Factory 模式
  • Builder 模式
  • Factory Method 模式
  • Prototype 模式
  • Singleton 模式
  • Registry of Singleton 模式

基本概念

當1個類沒法預感要創建哪一種類的對象或是1個類需要由子類來指定創建的對象時我們就需要用到Factory Method 模式了.簡單說來,Factory Method可以根據不同的條件產生不同的實例,固然這些不同的實例通常是屬于相同的類型,具有共同的父類.Factory Method把創建這些實例的具體進程封裝起來了,簡化了客戶真個利用,也改良了程序的擴大性,使得將來可以做最小的改動就能夠加入新的待創建的類. 通常我們將Factory Method作為1種標準的創建對象的方法,當發現需要更多的靈活性的時候,就開始斟酌向其它創建型模式轉化

factory method 模式結構

img

  1. Product: 需要創建的產品的抽象類.
  2. ConcreteProduct: Product的子類,1系列具體的產品.
  3. Creator: 抽象創建器接口,聲明返回Product類型對象的Factory Method.
  4. ConcreteCreator: 具體的創建器,重寫Creator中的Factory Method,返回ConcreteProduct類型的實例.

代碼實現

看了這么多,還不如直接寫代碼,來得好.

為了于簡單工廠和抽象工廠做辨別,我們也取福克斯電影公司的例子.

首先定義1個Movie抽象類,然后繼承兩個具體電影的子類,動作片(ActionMovie),愛情片(LoveMovie). 然后有1個抽象的工廠(FoxFilmFactory),它有兩個子類,1個生產工夫片(ActionFoxFactory),1個生產愛情片(LoveFoxFactory).然后我們觀眾(AudienceClient),只管問抽象工廠提供影片,不需要去管它具體怎樣分類的.

下面是類結構圖.

img

Movie 抽象類 --電影統稱

package org.leihuang.factorymethod; public abstract class Movie { public abstract void play() ; }

ActionMovie 抽象類的子類 --動作片

package org.leihuang.factorymethod; public class ActionMovie extends Movie { @Override public void play() { System.out.println("哼哼哈兮!"); } }

LoveMovie 繼承Movie --愛情片

package org.leihuang.factorymethod; public class LoveMovie extends Movie { @Override public void play() { System.out.println("愛老虎油!"); } }

FoxFilmFactory 抽象類 --福克斯總公司

package org.leihuang.factorymethod; public abstract class FoxFilmFactory { public abstract Movie createMovie(String name) ; }

ActionFoxFactory 繼承FoxFilmFactory類 --生產動作片的部門

package org.leihuang.factorymethod; public class ActionFoxFactory extends FoxFilmFactory { @Override public Movie createMovie(String name) { Movie movie = null ; try { movie = (Movie)Class.forName(name).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return movie ; } }

LoveFoxFactory 繼承抽象類 --生產愛情片的部門

package org.leihuang.factorymethod; public class LoveFoxFactory extends FoxFilmFactory { @Override public Movie createMovie(String name) { Movie movie = null ; try { movie = (Movie)Class.forName(name).newInstance() ; } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return movie; } }

AudienceClient --觀眾

package org.leihuang.factorymethod; public class AudienceClient { public static void main(String[] args) { FoxFilmFactory foxAction = new ActionFoxFactory() ; foxAction.createMovie("org.leihuang.factorymethod.ActionMovie").play(); ; FoxFilmFactory foxLove = new LoveFoxFactory() ; foxLove.createMovie("org.leihuang.factorymethod.LoveMovie").play(); } }


2014⑴2-03 23:55:17

Brave,Happy,Thanksgiving !


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产亚洲精品久久久久久久久激情 | 久久精品一区二区三区四区 | 欧美xxxxxxxxxx | 国产91成人精品亚洲精品 | 秋霞网站一级一片 | 性欧美丨18一19| 欧美日韩精品一区二区三区不卡 | 天天更新天天久久久更新影院 | 在线a亚洲视频播放在线观看 | 久久久久久国产精品免费免费 | 亚洲伊人影院 | 国产亚洲精品久久久久久牛牛 | 国产另类视频 | 中文字幕在线不卡精品视频99 | 欧美a在线看 | 夜夜躁日日躁 | 日本欧美韩国一区二区三区 | 欧美精品在线播放 | 日韩国产欧美精品综合二区 | 国产区久久 | 亚洲精品图 | 国产人成精品 | 欧美伦理三级在线播放影院 | 一区二区三区国产 | 欧美大片天天免费看视频 | jizzjizz视频 | 免费人成激情视频在线观看冫 | 欧美一区二区三区免费播放 | 久久九九久精品国产 | 网址在线观看 | 无人精品乱码一区二区三区 | 噜噜噜噜影院 | 国产在线视频一区二区三区 | 亚洲欧美精品久久 | 国产精品日韩欧美亚洲另类 | 欧美日韩亚洲国产一区二区三区 | 精品一区二区三区高清免费观看 | 国精品日韩欧美一区二区三区 | 永久在线播放 | 日韩中文字幕一区二区不卡 | 色www情 |