日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java设计模式 之 工厂方法模式

發布時間:2025/3/13 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式 之 工厂方法模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 使用設計模式的好處:可提高代碼的重復性,讓代碼更容易被他人理解,保證代碼的可靠性。

2. 工廠模式定義:就是創建一個工廠類來創建你需要的類,工廠模式包括工廠模式和抽象工廠模式,抽象工廠模式是工廠模式的擴展。

3. 工廠模式意圖:定義一個接口來創建對象,但是讓子類來決定哪些類需要被實例化,工廠方法把實例化工作推遲到子類中去實現。

4. 工廠方法適合場景:

?<1>. 有一組類似的對象需要創建

?<2>. 在編碼時不能預見需要創建哪種類的實例

?<3>. 系統需要考慮擴展性,不應依賴產品類實例如何被創建、組合和表達的細節

5. 工廠方法類圖:

代碼實現,舉個例子,以一汽大眾汽車工廠為例,大家都知道,一汽大眾可生產多款汽車,有速騰、高爾夫、CC、寶來等等,我們就是使用工廠來創建不同款式的汽車。


<1>. 創建汽車接口,該接口就有一個生產汽車抽象。

package com.dasauto.car;/*** 一汽大眾汽車接口* @author DuanCZ*/public interface ICar {/*** 生產汽車*/public void createCar();}


?

<2>. 創建速騰汽車實現類,該類實現汽車接口

package com.dasauto.car;public class SagitarCar implements ICar {/*** 生產速騰汽車*/public void createCar() {System.out.println("-----------生產一臺速騰汽車---------");}}


<3>,創建高爾夫汽車實現類,該類實現汽車接口

package com.dasauto.car;public class GolfCar implements ICar {/*** 生產高爾夫汽車*/public void createCar() {System.out.println("----------創建一臺高爾夫汽車----------");}}


<4>, 創建汽車工廠類,該類將根據不同款式的汽車類名稱來實例化對象

package com.dasauto.car;public class CarFactory {/*** 根據類名稱去創建汽車對象* @param className* @return*/public ICar getCar(String className){try {ICar car = (ICar) Class.forName(className).newInstance();return car;} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}


?

<5>, 模擬客戶端,測試

package com.dasauto.car;public class CarClient {public static void main(String[] args) {CarFactory carFactory = new CarFactory();ICar car = carFactory.getCar("com.dasauto.car.SagitarCar");car.createCar();}}


?工廠方法模式很簡單,就是單一的一種產品,這不同汽車類名稱可以配置到xml中去,如果以后多了一種汽車,那么就是編寫好實現類后,配置個XML文件,這樣客戶端就可以很簡單的應用了。

?




6. 抽象工廠方法類圖

相比工廠方法模式,抽象工廠就復雜一些了,它有產品族的概念,也就是說不是生產單一產品了,而是生產一系列產品。


代碼實現,例如我們做一款程序,程序可能使用多種不同的數據庫來完成數據持久化操作。下面是根據模型模擬代碼

<1>,

package com.dcz.demo;/*** 抽象產品A* @author DuanCZ*/public interface IProductA {public void method_1();public void method_2();}


?

<2>,

package com.dcz.demo;/*** 抽象產品B* @author DuanCZ*/ public interface IProductB {public void method_1();public void method_2();}


?

<3>,

package com.dcz.demo;public interface IAbstractFactory {public IProductA productA();public IProductB productB();}


?

<4>,

package com.dcz.demo;public class concretenessProductA1 implements IProductA {@Overridepublic void method_1() {System.out.println("生產等級為1的A類Method_1");}@Overridepublic void method_2() {System.out.println("生產等級為1的A類Method_2");}}


?

<5>,

package com.dcz.demo;public class concretenessProductA2 implements IProductA {@Overridepublic void method_1() {System.out.println("生產等級為2的A類Method_1");}@Overridepublic void method_2() {System.out.println("生產等級為2的A類Method_2");}}


?

<6>,

package com.dcz.demo;public class concretenessProductB1 implements IProductB {@Overridepublic void method_1() {System.out.println("生產等級為1的B類Method_1");}@Overridepublic void method_2() {System.out.println("生產等級為1的B類Method_2");}}


?

<7>,

package com.dcz.demo;public class concretenessProductB2 implements IProductB {@Overridepublic void method_1() {System.out.println("生產等級為2的B類Method_1");}@Overridepublic void method_2() {System.out.println("生產等級為2的B類Method_2");}}


?

<8>, package com.dcz.demo;public class ConcreateFactory1 implements IAbstractFactory {public IProductA productA() {return new concretenessProductA1();}public IProductB productB() {return new concretenessProductB1();}}
<9>, package com.dcz.demo;public class ConcreateFactory2 implements IAbstractFactory {@Overridepublic IProductA productA() {return new concretenessProductA2();}@Overridepublic IProductB productB() {return new concretenessProductB2();}}

<10>, package com.dcz.demo;public class Client {public static void main(String[] args) {IAbstractFactory concreateFactory1 = new ConcreateFactory1();IProductA productA = concreateFactory1.productA();productA.method_1();productA.method_2();} }

設計原則: 要依賴抽象,不要依賴具體類

?

轉載于:https://www.cnblogs.com/dcz1001/p/5927660.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Java设计模式 之 工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。