一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java設計模式之工廠方法模式詳解

java設計模式之工廠方法模式詳解

2021-05-27 13:54dubstep Java教程

這篇文章主要為大家詳細介紹了java設計模式之工廠方法模式詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下

工廠方法模式分為三種,具體內(nèi)容如下

一、普通工廠模式,就是建立一個工廠類,對實現(xiàn)了同一接口的一些類進行實例的創(chuàng)建。首先看下關系圖:

java設計模式之工廠方法模式詳解

舉例如下:(我們舉一個發(fā)送郵件和短信的例子)

首先,創(chuàng)建二者的共同接口:

java" id="highlighter_34749">
?
1
2
3
4
5
public interface sender {
 
 public void send();
 
}

其次,創(chuàng)建實現(xiàn)類:

?
1
2
3
4
5
6
public class mailsender implements sender {
 @override
 public void send() {
  system.out.println("this is mailsender!");
 }
}
?
1
2
3
4
5
6
public class smssender implements sender {
 @override
 public void send() {
  system.out.println("this is sms sender!");
 }
}

最后,建工廠類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class sendfactory {
 
 public sender produce(string type) {
  if ("mail".equals(type)) {
   return new mailsender();
  } else if ("sms".equals(type)) {
   return new smssender();
  } else {
   system.out.println("請輸入正確的類型!");
   return null;
  }
 }
}

我們來測試下:

?
1
2
3
4
5
6
7
8
public class factorytest {
 
 public static void main(string[] args) {
  sendfactory factory = new sendfactory();
  sender sender = factory.produce("sms");
  sender.send();
 }
}

輸出:this is sms sender!

二、多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字符串出錯,則不能正確創(chuàng)建對象,而多個工廠方法模式是提供多個工廠方法,分別創(chuàng)建對象。

關系圖:

java設計模式之工廠方法模式詳解

將上面的代碼做下修改,改動下sendfactory類就行,如下:

?
1
2
3
4
5
6
7
8
9
10
public class sendfactory {
 
 public sender producemail(){
  return new mailsender();
 }
 
 public sender producesms(){
  return new smssender();
 }
}

測試類如下:

?
1
2
3
4
5
6
7
public class factorytest {
 
 public static void main(string[] args) {
  sendfactory factory = new sendfactory();
  sender sender = factory.producemail();
  sender.send();
 }

輸出:this is mailsender!

 三、靜態(tài)工廠方法模式,將上面的多個工廠方法模式里的方法置為靜態(tài)的,不需要創(chuàng)建實例,直接調(diào)用即可。

?
1
2
3
4
5
6
7
8
9
10
public class sendfactory {
 
 public static sender producemail(){
  return new mailsender();
 }
 
 public static sender producesms(){
  return new smssender();
 }
}
?
1
2
3
4
5
6
7
public class factorytest {
 
 public static void main(string[] args) {
  sender sender = sendfactory.producemail();
  sender.send();
 }
}

輸出:this is mailsender! 

總體來說,工廠模式適合:凡是出現(xiàn)了大量的產(chǎn)品需要創(chuàng)建,并且具有共同的接口時,可以通過工廠方法模式進行創(chuàng)建。在以上的三種模式中,第一種如果傳入的字符串有誤,不能正確創(chuàng)建對象,第三種相對于第二種,不需要實例化工廠類,所以,大多數(shù)情況下,我們會選用第三種——靜態(tài)工廠方法模式

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/dubstep/archive/2018/08/23/9527312.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: voyeur多毛厕所| b站免费网站入口 | 天天色国产 | 精品视频在线观看 | av在线亚洲男人的天堂 | 欧美日韩专区国产精品 | 美国女艳星brandilove | 日韩在线一区二区三区 | 国产亚洲福利精品一区 | 亚洲国产成人精品无码区APP | 国语自产自拍秒拍在线视频 | caopren免费视频国产 | 欧美va在线 | 51国产午夜精品免费视频 | 女色在线观看免费视频 | 7788av| 亚洲国产欧美久久香综合 | 啪啪国产视频 | h杯奶水太多h | 校园春色偷拍自拍 | 欧美精品亚洲精品日韩专区va | 国产拍拍视频一二三四区 | 精品国产日韩亚洲一区在线 | 黑人k8经典| 私人影院免费观看 | 好大好硬好深好爽gif图 | 天美传媒影视在线免费观看 | 欧美不卡一区二区三区 | 2022最新国产在线 | 亚洲 日韩 国产 中文视频 | jj视频免费看 | 国产精品毛片无码 | 热久久天天拍天天拍热久久2018 | 白丝出水 | 精品国产福利在线 | 免费国产之a视频 | 国产精品免费看香蕉 | 午夜尤物| 欧美亚洲另类综合 | 97视频久久久 | 小小水蜜桃视频高清在线播放 |