欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于工廠方法模式的Java實現(xiàn)

 更新時間:2022年04月06日 17:33:06   作者:cainiao_23333  
這篇文章主要介紹了關于工廠方法模式的Java實現(xiàn)講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

工廠方法模式簡述

與簡單工廠模式基本相同,只是工廠是一個抽象的,需要有具體的工廠去實現(xiàn)它,然后利用這個工廠生產(chǎn)產(chǎn)品,之所以出現(xiàn)這個模式是因為,簡單工廠模式不符合OCP原則,添加新產(chǎn)品需要在已有的類中添加代碼。

而使用工廠方法模式,需要新產(chǎn)品的時候,需要創(chuàng)建兩個類,具體產(chǎn)品類實現(xiàn)產(chǎn)品接口,具體工廠類實現(xiàn)工廠接口,滿足OCP原則,但是每增加一個產(chǎn)品,需要增加兩個類,會產(chǎn)生大量的類。

創(chuàng)建步驟

步驟1

創(chuàng)建一個產(chǎn)品的接口

package com.ly.factory.factorymethod;
/**
?* Car中run方法的抽象
?* liyang 2020-07-10
?*
?* 也可以將其他共有的特性方法放入Car接口
?* 具體的Audi等實現(xiàn)Car的相應方法
?*/
?
public interface Car {
? ? void run();
}

步驟2

創(chuàng)建產(chǎn)品的實體類

package com.ly.factory.factorymethod;
public class Audi implements Car {
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("奧迪飛馳中");
? ? }
}
package com.ly.factory.factorymethod;
public class Benz implements Car {
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("奔馳飛馳中");
? ? }
}
package com.ly.factory.factorymethod;
public class Byd implements Car {
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("比亞迪飛馳中");
? ? }
}

步驟3

創(chuàng)建一個抽象工廠類

package com.ly.factory.factorymethod;
/**
?* 抽象的工廠,具有抽象的createCar方法
?* liyang 2020-07-10
?* 具體的AudiFactory類實現(xiàn)CarFactory
?*/
?
public interface CarFactory {
? ? Car createCar();
}

步驟4

創(chuàng)建抽象工廠的具體實現(xiàn)工廠

package com.ly.factory.factorymethod;
public class AudiFactory implements CarFactory{
? ? @Override
? ? public Car createCar() {
? ? ? ? return new Audi();
? ? }
}
package com.ly.factory.factorymethod;
public class BenzFactory implements CarFactory{
? ? @Override
? ? public Car createCar() {
? ? ? ? return new Benz();
? ? }
}
package com.ly.factory.factorymethod;
public class BydFactory implements CarFactory{
? ? @Override
? ? public Car createCar() {
? ? ? ? return new Byd();
? ? }
}

步驟5

測試使用上述工廠創(chuàng)建產(chǎn)品,先創(chuàng)建響應工廠,然后使用該工廠創(chuàng)造產(chǎn)品

package com.ly.factory.factorymethod;
/**
?* 工廠方法模式的客戶端測試
?* liyang 2020-07-10
?*
?* 增加一個具體的Car類,比如Benz類,實現(xiàn)Car接口
?* 需要增加一個具體的BenzFactory實現(xiàn)CarFactory
?* 通過增加新類擴展功能,不需要更改原有的代碼
?* 因此,滿足OCP原則,但是會增加很多類,類爆炸?
?* 所以,在一般的開發(fā)中,推薦使用simpleFactory模式
?*
?*/
?
public class Client {
? ? public static void main(String[] args) {
? ? ? ? Car c1 = new AudiFactory().createCar();
? ? ? ? Car c2 = new BenzFactory().createCar();
? ? ? ? Car c3 = new BydFactory().createCar();
? ? ? ??
? ? ? ? c1.run();
? ? ? ? c2.run();
? ? ? ? c3.run();
? ? }
}

結果:

奧迪飛馳中
奔馳飛馳中
比亞迪飛馳中
 
Process finished with exit code 0

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java數(shù)組的擴容代碼示例

    Java數(shù)組的擴容代碼示例

    這篇文章主要介紹了Java數(shù)組的擴容,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2017-09-09
  • Spring中@Autowired和@Resource注解相同點和不同點

    Spring中@Autowired和@Resource注解相同點和不同點

    這篇文章主要介紹了Spring中@Autowired和@Resource注解相同點和不同點,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • java ThreadGroup的作用及方法詳解

    java ThreadGroup的作用及方法詳解

    這篇文章主要介紹了java ThreadGroup的作用及方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java 線程死鎖的問題解決辦法

    Java 線程死鎖的問題解決辦法

    這篇文章主要介紹了 Java 線程死鎖的問題解決辦法的相關資料,希望通過本大家能幫助到大家,遇到類似問題能夠解決,需要的朋友可以參考下
    2017-09-09
  • SpringCloud?Eureka服務治理之服務注冊服務發(fā)現(xiàn)

    SpringCloud?Eureka服務治理之服務注冊服務發(fā)現(xiàn)

    這篇文章主要介紹了SpringCloud?Eureka服務治理服務注冊和服務發(fā)現(xiàn)概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • SpringMVC HttpMessageConverter報文信息轉換器

    SpringMVC HttpMessageConverter報文信息轉換器

    ??HttpMessageConverter???,報文信息轉換器,將請求報文轉換為Java對象,或?qū)ava對象轉換為響應報文。???HttpMessageConverter???提供了兩個注解和兩個類型:??@RequestBody,@ResponseBody???,??RequestEntity,ResponseEntity??
    2023-01-01
  • Java 其中翻轉字符串的實現(xiàn)方法

    Java 其中翻轉字符串的實現(xiàn)方法

    這篇文章主要介紹了Java 其中翻轉字符串的實現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • 詳解如何使用IntelliJ IDEA新建一個Servlet項目

    詳解如何使用IntelliJ IDEA新建一個Servlet項目

    這篇文章主要介紹了詳解如何使用IntelliJ IDEA新建一個Servlet項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 使用JavaBean根據(jù)指定條件設置屬性值默認值方式

    使用JavaBean根據(jù)指定條件設置屬性值默認值方式

    這篇文章主要介紹了使用JavaBean根據(jù)指定條件設置屬性值默認值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • springboot集成swagger3與knife4j的詳細代碼

    springboot集成swagger3與knife4j的詳細代碼

    這篇文章主要介紹了springboot集成swagger3與knife4j,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08

最新評論