日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

設計模式:工廠方法模式

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

原文地址: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 !


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩精品电影在线观看 | 乱淫视频| 丰满少妇高潮惨叫久久久一 | 精品国产91| 欧美在线视频免费观看 | 成人在线视频一区 | 毛片久久 | 国产激情在线观看 | 成人国产综合 | 日韩久久久久 | 国产精品久久久久久久久久新婚 | 色综合一区二区三区 | 欧美一区二区人人喊爽 | 国产伦精品一区二区三区免费 | 伊人伊人网| 天天综合网天天综合色 | 久久久久久国产精品免费免费 | 色婷婷在线播放 | 久久久久久久国产 | 黄色小视频免费观看 | 欧美午夜精品一区二区三区 | 亚洲欧洲精品在线 | 男人av资源 | 麻豆久久精品 | a级网站| 精品一区二区国产 | 国产精品久久久久久久久久东京 | 性高湖久久久久久久久 | 国产欧美高清在线观看 | 国产精品日韩在线观看 | 亚洲国产日韩精品 | 成年人黄色片 | 国产剧情一区二区三区 | 99视频免费在线观看 | 日韩视频二区 | 国产三级免费观看 | 国产精品国产三级国产 | 欧美一级片在线观看 | 欧美激情欧美激情在线五月 | 中文字幕日韩电影 | 黄网址在线免费观看 |