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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本高清免费看 | 极品美女写真菠萝蜜视频 | 乌克兰粉嫩摘花第一次 | pron在线观看| 国产我不卡 | 国产欧美综合一区二区 | 国产在线伊人 | 国产视频一区二 | 亚洲狠狠婷婷综合久久久久网站 | 麻豆网站在线免费观看 | 男女男精品视频免费观看 | chanelpreston欧美网站 | 亚洲国产成人精品不卡青青草原 | 美女张开腿黄网站免费精品动漫 | 亚洲AV蜜桃永久无码精品红樱桃 | 欧美日韩专区国产精品 | 国产a免费| 免费在线观看网址大全 | freesex1718处xx | 亚洲天堂成人在线 | 果冻传媒在线观看的 | 国产乱叫456在线 | 成人国产在线观看 | 亚洲国产第一区二区香蕉日日 | 欧美四虎影院 | 五月婷婷在线免费观看 | 成人国产精品一区二区不卡 | 射逼视频 | 亚洲成综合 | 国产精品nv在线观看 | 精品亚洲456在线播放 | jk制服白丝超短裙流白浆 | 大象传媒免费网址 | 日韩免费在线看 | 99影视在线视频免费观看 | 美女被的在线网站91 | 羞羞一区二区三区四区片 | 国产精品久久久精品视频 | 教师系列 大桥未久在线 | 果冻传媒天美传媒网址入口 | 亚洲精品久久久久AV无码 |