溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java設(shè)計模式學(xué)習(xí)之工廠方法模式如何實現(xiàn)

發(fā)布時間:2021-08-07 14:04:33 來源:億速云 閱讀:118 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“java設(shè)計模式學(xué)習(xí)之工廠方法模式如何實現(xiàn)”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java設(shè)計模式學(xué)習(xí)之工廠方法模式如何實現(xiàn)”這篇文章吧。

工廠方法模式(Factory Method):定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。

工廠方法模式結(jié)構(gòu)圖:

java設(shè)計模式學(xué)習(xí)之工廠方法模式如何實現(xiàn)

項目需求,創(chuàng)建一個雷鋒工廠,大學(xué)生可以去幫助別人,志愿者也可以幫助別人做事情。

1:創(chuàng)建一個雷鋒類,具有幫助別人掃地,洗衣,買米的功能。

package FactoryMethodModel;

public class LeiFeng {

 public void Sweep(){
  System.out.println("掃地");
 }
 
 public void Wash(){
  System.out.println("洗衣");
 }
 
 public void BuyRice(){
  System.out.println("買米");
 }
}

2:創(chuàng)建一個學(xué)雷鋒的大學(xué)生的類,繼承雷鋒類,可增加自己的功能。

package FactoryMethodModel;

/**
 * 學(xué)雷鋒的大學(xué)生
 * @author 我不是張英俊
 *
 */
public class UniversityStudent extends LeiFeng {
//里面可以增加專屬大學(xué)生的功能
}

3:創(chuàng)建一個社區(qū)志愿者的類,繼承雷鋒類。

package FactoryMethodModel;

/**
 * 學(xué)雷鋒的社區(qū)人員
 * @author 我不是張英俊
 *
 */
public class Volunteer extends LeiFeng {

}

4:創(chuàng)建一個雷鋒工廠接口。

package FactoryMethodModel;

/**雷鋒工廠的總接口。
 * @author 我不是張英俊
 *
 */
interface LeiFengFactory {
 LeiFeng CreatLenFeng();
}

5:創(chuàng)建學(xué)雷鋒的大學(xué)生的工廠。

package FactoryMethodModel;

/**
 * 學(xué)雷鋒的大學(xué)生工廠
 * @author 我不是張英俊
 *
 */
public class UniversityStudentFactory implements LeiFengFactory {

 @Override
 public LeiFeng CreatLenFeng() {
  return new UniversityStudent();
 }

 
}

6:創(chuàng)建學(xué)雷鋒的志愿者工廠。

package FactoryMethodModel;

/**
 * 學(xué)雷鋒的社區(qū)制志愿者
 * @author 我不是張英俊
 *
 */
public class VolunteerFactory implements LeiFengFactory {

 @Override
 public LeiFeng CreatLenFeng() {
 // TODO Auto-generated method stub
 return new Volunteer();
 }

 
}

7:測試類

package FactoryMethodModel;

/**
 * 建立一個雷鋒工廠,大學(xué)生可以以雷鋒的名義起幫助別人,社區(qū)志愿者也可以。
 * 工廠化模式:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。
 * 工廠方法使一個類的實例化延遲到其子類。
 * @author 我不是張英俊
 *
 */
public class Test {

 public static void main(String[] args) {
 
 LeiFengFactory factory=new UniversityStudentFactory();
 LeiFeng student =factory.CreatLenFeng();
 
 student.BuyRice();
 student.Sweep();
 student.Wash();
 }

}

8:控制臺

買米
掃地
洗衣

總結(jié):簡單工廠方法違背了開放-封閉原則,而工廠方法克服了此問題,當(dāng)需要增加新的,例如小學(xué)生學(xué)雷鋒的時候,工廠方法增加新的小學(xué)生工廠即可,然后再測試類中調(diào)用即可。

工廠方法模式還保持了封裝對象創(chuàng)建過程的有點。使得要更換對象的時候,不需要做打的改動就可以實現(xiàn),降低了客戶程序與產(chǎn)品對象的耦合,工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。由于使用了多態(tài)性,工廠模式保存了簡單工廠模式的有點,并且克服了缺點。但缺點是,沒增加一個產(chǎn)品,就必須增加一個工廠類,增加的額外的開發(fā)量。

以上是“java設(shè)計模式學(xué)習(xí)之工廠方法模式如何實現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI