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

* A:工廠方法模式概述*  工廠方法模式中抽象工廠類負責定義創建對象的接口,具體對象的創建工作由繼承抽象工廠的具體類實現。*  簡單來說:先定義一個工廠,工廠里面有些方法,這些方法就是用來創建動物的,然后有很多子工廠,顧客想創建貓,就來個貓工廠,想創建狗,就來個狗工廠*  創建針對的對象就是創建針對的工廠* B:優點*  客戶端不需要再負責對象的創建,從而明確了各個類的職責,如果有新的對象增加,只需要增加一個具體的類和具體的工廠類即可,不影響已有的代碼,后期維護容易,增強了系統的擴展性*  也就是,不用修改原來的代碼,工廠定義完了,貓工廠,狗工廠定義完了之后,影響不大,以后想要再擴展的話,就在創建一個工廠,想要啥,就創建啥工廠就可以了,不用改原來的工廠,也不用該原來的設備* C:缺點*  需要額外的編寫代碼,增加了工作量* D:案例演示:*  動物抽象類:public abstract Animal(public abstract void eat();)*  工廠接口:public interface Factory(public abstract Animal creatAnimal();)*  具體狗類:public class Dog extends Animal{}*  具體貓類:public class Cat extends Animal{}*  開始:在測試類中每一個具體的內容自己創建對象,但是,創建對象的工作如果比較麻煩,就需要有人專門做這個事情,所以就制造了一個專門的類來創建對象,發現每次修改代碼太麻煩,用工廠方法改進*  針對每一個具體的實現提供一個具體的工廠*  狗工廠:public class DogFactory implements Factory{*          public Animal createAnimal(){~~~}*      }*  貓工廠:public class CatFactory implements Factory{*          public Animal creatAnimal(){~~~}*      }
package com.yy.工廠方法;public interface Factory {          //先定義一個   工廠   接口public Animal createAnimal();   //該接口里面有個createAnimal方法,目的是為了創建動物//返回值類只能是Animal類型,不能是返回后狗,貓之類的;也就是所謂的多態的思想
}
package com.yy.工廠方法;public class DogFactory implements Factory {        //創建一個  狗  工廠(DogFactory類),讓DogFactory去實現Factory這個接口@Overridepublic Animal createAnimal() {                  //然后再重寫Factory這個接口里面的createAnimal方法return new Dog();                           //返回一只狗}   }
package com.yy.工廠方法;public class CatFactory implements Factory {        //創建一個  貓  工廠(CatFactory類),讓CatFactory去實現Factory這個接口public Animal createAnimal() {                  //然后再重寫Factory這個接口里面的createAnimal方法return new Cat();                           //返回一只貓}}
package com.yy.工廠方法;public class Test {                                 //創建一個測試類public static void main(String[] args) {DogFactory df = new DogFactory();           //創建 狗 工廠對象Dog d = (Dog) df.createAnimal();            //強制類型轉換df.createAnimal();因為,createAnimal這個方法的返回值類型是Animal,想要用 Dog類型接收,就得將Animal類型強轉為Dog類型d.eat();}}

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

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

相關文章

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…

一點心得(0)

1, 在C中&#xff0c;如果棧里的空間不足的話&#xff0c;要考慮用new命令在堆上動態生成數據&#xff0c;比如說保存所有無符號整數型的bitset&#xff0c;得用bitset<UINT_MAX1>* bs new bitset<UINT_MAX1>;來聲明定義&#xff0c;最后別忘了delete掉。 2, make…

Java——UPD輸出及優化再優化

* UPD傳輸不區分客戶端跟服務端&#xff0c;* 這里用Send和Receive這兩個方法決定誰發誰收 * 1.發送Send * 創建DatagramSocket,隨機端口號* 創建DatagramPacket,指定數據、長度、地址、端口* 創建DatagramSocket發送DatagramPacket* 關閉DatagramSocket 代碼如下&…

FLEX:圖形制作皮膚vs編程制作皮膚

Styles&#xff08;樣式&#xff09;提供了一個可以自定義flex外觀的層.可以圖形制作皮膚&#xff0c;也可以編程實現. &#xff08;小小菜鳥翻譯&#xff09; 圖形制作皮膚的 優點是 很容易實現&#xff0c;通過位圖&#xff0c;矢量圖&#xff0c;swf。 缺點是功能有限。…

Java文件類boolean canExecute()方法(帶示例)

文件類boolean canExecute() (File Class boolean canExecute()) This method is available in package java.io.File.canExecute(). 軟件包java.io.File.canExecute()中提供了此方法。 This method is used to execute the file and the file is represented by the abstract …

python安全攻防---scapy使用

導入scapy包 from scapy.all import *構造包 a Ether()/IP(dst114.114.114.114)/TCP(dport80)/應用層數據我們如果記不得每個包的選項使&#xff0c;可以使用show()來查看 print(a.show())發送包 sr(IP(dst‘192.168.1.0/24’)/TCP(dport(1,65535)), timeout2) &#xff1…