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

歡迎訪問 生活随笔!

生活随笔

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

java

java中factory方法_Java的23中设计模式--工厂方法模式(Factory Method)

發布時間:2023/12/4 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中factory方法_Java的23中设计模式--工厂方法模式(Factory Method) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.普通工廠模式

工廠類

/*** @Title Factory.java

* @Package factory.factory1

* @date 2015-1-22 上午10:16:02

*@versionV1.0*/

packagefactory.factory1;/*** @ClassName Factory

* @date 2015-1-22 上午10:16:02*/

public classFactory {publicSender procedure(String type) {if("mail".endsWith(type))

{return newMailSender();

}if("sms".endsWith(type))

{return newSMSSender();

}else{

System.out.println("未輸入正確的類型");//更好的話加入異常

return null;

}

}

}

發送器接口

/*** @Title Sender.java

* @Package factory.factory1

* @date 2015-1-22 上午10:07:24

*@versionV1.0*/

packagefactory.factory1;/*** @ClassName Sender

* @date 2015-1-22 上午10:07:24*/

public interfaceSender {public voidsend();

}

發送器實現類

/*** @Title MailSender.java

* @Package factory.factory1

* @date 2015-1-22 上午10:09:29

*@versionV1.0*/

packagefactory.factory1;/*** @ClassName MailSender

* @date 2015-1-22 上午10:09:29*/

public class MailSender implementsSender{/*(non-Javadoc)

* @see factory.factory1.Sender#send()*/@Overridepublic voidsend() {

System.out.println("this is a mailsender");

}

}

/*** @Title SMSSender.java

* @Package factory.factory1

* @date 2015-1-22 上午10:14:36

*@versionV1.0*/

packagefactory.factory1;/*** @ClassName SMSSender

* @date 2015-1-22 上午10:14:36*/

public class SMSSender implementsSender{/*(non-Javadoc)

* @see factory.factory1.Sender#send()*/@Overridepublic voidsend() {

System.out.println("this is a smssender");

}

}

測試類:

/*** @Title Test.java

* @Package factory.factory1

* @date 2015-1-22 上午10:20:19

*@versionV1.0*/

packagefactory.factory1;/*** @ClassName Test

* @date 2015-1-22 上午10:20:19*/

public classTest {public static voidmain(String[] args) {

Factory factory= newFactory();

Sender sender= factory.procedure("mail");

sender.send();

}

}

這種方法的實現方式對傳入的類型要求比較高,就是傳入的參數如果錯誤就不能夠獲得相對應的產生的東西。

2.多個工廠的方法

/*** @Title Factory.java

* @Package factory.factory1

* @date 2015-1-22 上午10:16:02

*@versionV1.0*/

packagefactory.factory3;/*** @ClassName Factory

* @date 2015-1-22 上午10:16:02*/

public classFactory {publicSender mailSender(){return newMailSender();

}publicSender smsSender(){return newSMSSender();

}

}

將上面的工廠類修改成這樣子即可。

測試類:

/*** @Title Test.java

* @Package factory.factory1

* @date 2015-1-22 上午10:20:19

*@versionV1.0*/

packagefactory.factory3;/*** @ClassName Test

* @date 2015-1-22 上午10:20:19*/

public classTest {public static voidmain(String[] args) {

Factory factory= newFactory();

Sender sender=factory.mailSender();

sender.send();

}

}

3.靜態工廠的方法 將工廠的方法修改成靜態的方法

/*** @Title Factory.java

* @Package factory.factory1

* @date 2015-1-22 上午10:16:02

*@versionV1.0*/

packagefactory.factory4;/*** @ClassName Factory

* @date 2015-1-22 上午10:16:02*/

public classFactory {public staticSender mailSender(){return newMailSender();

}public staticSender smsSender(){return newSMSSender();

}

}

測試類

/*** @Title Test.java

* @Package factory.factory1

* @date 2015-1-22 上午10:20:19

*@versionV1.0*/

packagefactory.factory4;/*** @ClassName Test

* @date 2015-1-22 上午10:20:19*/

public classTest {public static voidmain(String[] args) {//Factory factory = new Factory();

Sender sender =Factory.mailSender();

sender.send();

}

}

4.抽象工廠模式

工廠方法模式有一個問題就是,類的創建依賴工廠類,也就是說,如果想要拓展程序,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定 的問題,如何解決?就用到抽象工廠模式,創建多個工廠類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的代碼。因為抽象工廠不 太好理解,我們先看看圖,然后就和代碼,就比較容易理解。

提供一個工廠的接口

/*** @Title Provider.java

* @Package factory.factory2

* @date 2015-1-22 上午10:36:18

*@versionV1.0*/

packagefactory.factory2;/*** @ClassName Provider

* @date 2015-1-22 上午10:36:18*/

public interfaceProvider {publicSender procedure();

}

提供一個發送的接口

/*** @Title Sender.java

* @Package factory.factory2

* @date 2015-1-22 上午10:37:03

*@versionV1.0*/

packagefactory.factory2;/*** @ClassName Sender

* @date 2015-1-22 上午10:37:03*/

public interfaceSender {public voidsend();

}

分別兩個類來實現這發送接口

/*** @Title MailSender.java

* @Package factory.factory2

* @date 2015-1-22 上午10:45:05

*@versionV1.0*/

packagefactory.factory2;/*** @ClassName MailSender

* @date 2015-1-22 上午10:45:05*/

public class MailSender implementsSender{/*(non-Javadoc)

* @see factory.factory2.Sender#send()*/@Overridepublic voidsend() {

System.out.println("this is a mail sender");

}

}

/*** @Title SmsSender.java

* @Package factory.factory2

* @date 2015-1-22 上午10:40:06

*@versionV1.0*/

packagefactory.factory2;/*** @ClassName SmsSender

* @date 2015-1-22 上午10:40:06*/

public class SmsSender implementsSender{/*(non-Javadoc)

* @see factory.factory2.Sender#send()*/@Overridepublic voidsend() {

System.out.println("this is a mail sender");

}

}

提供兩個類實現抽象工廠的接口

/*** @Title SendMailFactory.java

* @Package factory.factory2

* @date 2015-1-22 上午10:44:34

*@versionV1.0*/

packagefactory.factory2;/*** @ClassName SendMailFactory

* @date 2015-1-22 上午10:44:34*/

public class SendMailFactory implementsProvider {/*(non-Javadoc)

* @see factory.factory2.Provider#procedure()*/@OverridepublicSender procedure() {//TODO Auto-generated method stub

return newMailSender();

}

}

/*** @Title SmsSendFactory.java

* @Package factory.factory2

* @date 2015-1-22 上午10:41:23

*@versionV1.0*/

packagefactory.factory2;/*** @ClassName SmsSendFactory

* @date 2015-1-22 上午10:41:23*/

public class SmsSendFactory implementsProvider{/*(non-Javadoc)

* @see factory.factory2.Provider#procedure()*/@OverridepublicSender procedure() {//TODO Auto-generated method stub

return newSmsSender();

}

}

測試類:

/*** @Title Test.java

* @Package factory.factory2

* @date 2015-1-22 上午10:48:29

*@versionV1.0*/

packagefactory.factory2;/*** @ClassName Test

* @date 2015-1-22 上午10:48:29*/

public classTest {public static voidmain(String[] args) {

Provider provider= newSendMailFactory();

Sender sender=provider.procedure();

sender.send();

}

}

總結

以上是生活随笔為你收集整理的java中factory方法_Java的23中设计模式--工厂方法模式(Factory Method)的全部內容,希望文章能夠幫你解決所遇到的問題。

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