Java——設計模式(簡單工廠模式)

 * A:簡單工廠模式概述*  簡單工廠模式又叫靜態工廠方法模式,它定義了一個具體的工廠類負責創建一些類的實例* B:優點*  客戶端不需要再負責對象的創建,從而明確了各個類的職責*  簡單來說,客戶端你只需要用就可以了,就不用創建了,工廠來創建就可以了* C:缺點*  這個靜態工廠類負責所有對象的創建,如果有新的對象增加,或者某些對象的創建方式不同,就需要不斷地修改工廠類,不利于后期的維護*  也就是說:你得需要不斷地去修改你的源碼,是不利于后期的維護的* D:案例演示*  動物抽象類:public abstract Animal(public abstract void eat();)*  具體狗類:public class Dog extends Animal{}*  具體貓類:public class Cat extends Animal{}*  開始:在測試類中每個具體的內容自己創建對象,但是,創建對象的工作如果比較麻煩,就需要有人專門做這個事情,所以就制造了一個專門的類來創建對象* * 例如:本來我們創建對象需要自己去創建,比如說,你需要一只狗,自己就創建一個,而簡單工廠認為,對于這件事就不勞費客戶了,創建狗對象或者是貓對象,交個簡單工廠去創建就可以了* 要狗,簡單工廠就會給客戶提供狗,要貓,簡單工廠就會給顧客提供貓;所以,現在我們就要做一個工廠,這個工廠就是用來生產狗,或者貓的;* 首先,要創建工廠得有Animal、Dog、Cat這些類
package com.yy.簡單工廠;public abstract class Animal {      //創建一個動物抽象類,在這個Animal抽象類里面有個  吃  的方法public abstract void eat();}
package com.yy.簡單工廠;public class Dog extends Animal {       //創建一個狗類,讓Dog類去繼承Animal這個抽象類public void eat(){                  //并且去重寫Animal里面的的eat這個抽象方法System.out.println("狗吃肉");    //然后輸出一句話:狗吃肉}}
package com.yy.簡單工廠;public class Cat extends Animal {           //創建一個貓類,讓Cat類去繼承Animal這個抽象類public void eat() {                     //并且去重寫Animal里面的的eat這個抽象方法System.out.println("貓吃魚");        //然后輸出一句話:狗吃肉}}
package com.yy.簡單工廠;public class AnimalFactory {                    //創建一個動物工廠,目的是為了生產動物,可以生產狗,也可以生產貓,需要啥就創建啥對象即可/*public static Dog createDog(){              //該方法用來創建狗return new Dog();                       //返回一個狗}public static Cat createCat(){              //該方法用來創建貓return new Cat();                       //返回一個貓}*///我們發現,如果動物太多的話,必須得定義很多個方法,復用性太差//改進public static Animal createAnimal(String name){         //返回類型為Animal,參數為一個 名字if("dog".equals(name)){                             //如果傳入的是一只狗的話,就對參數進行判斷return new Dog();                               //參數是狗,就返回一個狗}else if("cat".equals(name)){                       //如果傳入的是一只貓的話,就對參數進行判斷return new Cat();                               //參數是貓,就返回一個狗}else {                                             //如果傳入的是既不是狗又不是貓的話return null;                                    //就返回一個null}//如果在有一個其他的類,就會返回null,一返回null,Test這個類就會進行,null就開始調用eat這個方法,然后就會出現空指針異常,這個就是簡單工廠模式的弊端所在}}
package com.yy.簡單工廠;public class Test {     //做一個測試類public static void main(String[] args) {/*Dog yy = AnimalFactory.createDog();                   //想要一只狗,運用  類名.  來調用System.out.println(yy);*/                               //打印 狗 ,這里沒有重寫toString方法,所以返回為類名+@+HashCode16進制Dog d = (Dog) AnimalFactory.createAnimal("dog");        //通過   類名.  來調用,由于 AnimalFactory.createAnimal該方法返回的是Animal,而我們通過Dog接收,所以這時要進行強轉,由Animal類型強制轉換為Dog類型d.eat();                                                //類名.方法    調用Dog類里面的eat方法//輸出結果:狗吃肉Cat c =  (Cat) AnimalFactory.createAnimal("cat");c.eat();//輸出結果:貓吃魚}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java ObjectOutputStream writeFloat()方法與示例

ObjectOutputStream類writeFloat()方法 (ObjectOutputStream Class writeFloat() method) writeFloat() method is available in java.io package. 在java.io包中提供了writeFloat()方法 。 writeFloat() method is used to write the given 4 bytes of a float value. writeFl…

python安全攻防---信息收集---whois查詢

whois是用來查詢域名的IP以及所有者信息的傳輸協議。簡單地說,whois就是一個數據庫,用來查詢域名是否以及被注冊,以及注冊域名的詳細信息(如域名所有人、域名注冊商等)。 使用whois查詢,首先通過pip安裝py…

百度面試題:從輸入url到顯示網頁,后臺發生了什么?

參考http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html 原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作為一個軟件開發者,你一定會…

VS2005無法啟動修復辦法

c:\Program Files\Microsoft Visual Studio 8\Common7\IDE>devenv /ResetSkipPkgs 轉載于:https://www.cnblogs.com/doc/archive/2008/10/10/1307887.html

Java——設計模式(工廠方法模式)

* A:工廠方法模式概述* 工廠方法模式中抽象工廠類負責定義創建對象的接口,具體對象的創建工作由繼承抽象工廠的具體類實現。* 簡單來說:先定義一個工廠,工廠里面有些方法,這些方法就是用來創建動物的,然后有很多子工…

python安全攻防---爬蟲基礎---get和post提交數據

get提交數據1 get提交的數據就附在提交給服務器的url之后,以?開頭參數之間以&隔開,例如/admin/user/123456.aspx?name123&id123 案例:寫個腳本,在sogou自動搜索周杰倫,并將搜索頁面的數據獲取 程…

JavaMail中解決中文附件名亂碼的問題

網上有很多類似的解決方案,很多是使用 if ((fileName ! null) && (fileName.toLowerCase().indexOf("gb2312") ! -1)){ fileName MimeUtility.decodeText(fileName); } 來解決,但對應gbk編碼的附件名,這里仍不能正確處…

Java ObjectOutputStream writeBytes()方法與示例

ObjectOutputStream類writeBytes()方法 (ObjectOutputStream Class writeBytes() method) writeBytes() method is available in java.io package. writeBytes()方法在java.io包中可用。 writeBytes() method is used to write the given string as a sequence of bytes. write…

如何集中注意力(3)

如何集中注意力(3) [ 2008-10-20 10:15 ]by Glen Stansberry of LifeDev (feed). 集中注意力并不是一件很容易的事情,尤其是處在當前這個充滿誘惑和紛擾的世界里。下面是繼續告訴大家一些有幫助的方法: 7. Plan your day to the T…

Java——網絡編程三要素

* A:計算機網絡* 是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作系統、網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統。* 其實我們這些網,之所以能…

python安全攻防---爬蟲基礎--re解析數據

0x01 re基礎 使用re模塊,必須先導入re模塊 import refindall():匹配所有符合正則的內容,返回的是一個列表 import restr "我的電話:10086,女朋友電話:11011" list re.findall(\d,str) print…

BSP for good 3d engine

1.open sourcehttp://irrlicht.sourceforge.net/downloads/ 2.不錯的小材質http://www.permadi.com/tutorial/webgraph/index.html 3.java bsp display(demo):http://www.symbolcraft.com/graphics/bsp/index.php http://www.faqs.org/faqs/graphics/bsptree-faq/ 4.a bps ill…

Java InputStreamReader getEncoding()方法及示例

InputStreamReader類的getEncoding()方法 (InputStreamReader Class getEncoding() method) getEncoding() method is available in java.io package. getEncoding()方法在java.io包中可用。 getEncoding() method is used to get the encoding name avail for this InputStrea…

python安全攻防---爬蟲基礎---BeautifulSoup解析

0x01 基礎 使用bs4首先要安裝,安裝后導入 import bs4bs對象有兩個方法,一個是find,另一個是find_all find(標簽名,屬性值):只返回一個,返回也是bs對象,可以繼續用find…

DataRabbit 3.1發布,完全支持SqlServer2005/2008

增加了對SqlServer2005/2008的新的數據類型的支持,如uniqueidentifier、time、sql_variant等。另外,EntityCreator也一起更新--不再強迫為Entity生成ToString()方法,使用者可以主動選擇是否要生成。 DataRabbit 3.1 下…

Java——Socket通信原理

* Socket通信原理圖解* A:Socket(中文翻譯為:電源插座)套接字概述* 網絡上具有唯一標識的IP地址和端口號組合在一起才能構成唯一能識別的標識套接字* 通信的兩端都有Socket(兩端都是電源插座,中間是啥?不就是電線啦,電…

asp.net鏈接mysql數據庫------------【個人收集】

在web.config文件中添加如下樣式的數據庫鏈接字符串&#xff1a; <add name"dbconnection" connectionString"DataBasedatabasename;Server127.0.0.1;Uid用戶名;Pwd密碼;character setgbk;" providerName"MySql.Data.MySqlClient"/></c…

sql2005 遠程連接

SQL Server 2005 不允許遠程連接解決方法轉載于:https://www.cnblogs.com/lcq135/archive/2008/11/06/1328380.html

Java GregorianCalendar computeTime()方法與示例

GregorianCalendar類computeTime()方法 (GregorianCalendar Class computeTime() method) computeTime() method is available in java.util package. java.util包中提供了computeTime()方法 。 computeTime() method is used to compute the calendar fields to the calendar …

python安全攻防---scapy基礎---計算機網絡各層協議

網絡層次劃分 比較常用的是TCP/IP五層協議。 0x01應用層 應用層是網絡應用程序以及它們的應用層協議存留的地方。應用層協議和應用程序直接掛鉤 DHCP(Dynamic Host Configuration Protocol)動態主機分配協議&#xff0c;使用 UDP 協議工作&#xff0c;主要有兩個用途&#xf…