精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

優秀程序員早就學會用“狀態模式”代替if-else了

開發 前端
2020年已經進入倒計時了,大家立好的flag完成了嗎?2020實“鼠”不易,希望2021可以“牛”轉乾坤。

 2020年已經進入倒計時了,大家立好的flag完成了嗎?2020實“鼠”不易,希望2021可以“牛”轉乾坤。

簡介

狀態模式是行為型設計模式的一種。其設計理念是當對象的內部狀態發生改變時,隨之改變其行為。狀態和行為之間是一一對應的。

該模式主要用于,對象的行為依賴于它的狀態,并且其行為是隨著狀態的改變而切換時。

狀態模式UML類圖

優秀程序員早就學會用“狀態模式”代替if-else了

 

類圖講解

State:抽象狀態接口(也可以定義成抽象類),該接口封裝了所有狀態所對應的行為。

ConcreteStateA/B:具體狀態類,該類實現了抽象狀態接口,會根據自身對應的狀態來實現接口中定義的方法,還有另一個功能是指明如何過渡到下一個狀態。

Context:環境(上下文)角色,該類負責狀態的切換,還持有一個State實例,代表當前環境所處狀態。

案例講解

案例:通過狀態模式來實現自助售賣機的功能。

狀態接口

 

  1. public interface State { 
  2.   // 挑選商品 
  3.   void choose(); 
  4.   // 付款 
  5.   boolean payment(); 
  6.   // 分發商品 
  7.   void dispenseCommodity(); 

挑選商品狀態類

 

  1. public class ChooseGoods implements State { 
  2.  
  3.   VendingMachine machine; 
  4.  
  5.   public ChooseGoods(VendingMachine machine) { 
  6.     this.machine = machine; 
  7.   } 
  8.  
  9.   @Override 
  10.   public void choose() { 
  11.     if (machine.getCount() > 0) { 
  12.       System.out.println("商品挑選成功,請及時付款!"); 
  13.       machine.setState(machine.getPaymentState()); 
  14.     } else { 
  15.       System.out.println("很遺憾,商品售罄了!"); 
  16.       machine.setState(machine.getEmptyState()); 
  17.     } 
  18.   } 
  19.  
  20.   @Override 
  21.   public boolean payment() { 
  22.     System.out.println("請先挑選商品!"); 
  23.     return false
  24.   } 
  25.  
  26.   @Override 
  27.   public void dispenseCommodity() { 
  28.     System.out.println("請先挑選商品!"); 
  29.   } 

付款狀態類

 

  1. public class PaymentState implements State { 
  2.  
  3.   VendingMachine machine; 
  4.  
  5.   public PaymentState(VendingMachine machine) { 
  6.     this.machine = machine; 
  7.   } 
  8.  
  9.   @Override 
  10.   public void choose() { 
  11.     System.out.println("商品已選購完成請勿重復挑選"); 
  12.   } 
  13.  
  14.   @Override 
  15.   public boolean payment() { 
  16.     Random random = new Random(); 
  17.     int num = random.nextInt(10); 
  18.     if(num % 2 == 0){ 
  19.       System.out.println("付款成功!"); 
  20.       machine.setState(machine.getDispenseCommodityState()); 
  21.       return true
  22.     } 
  23.     System.out.println("付款失敗,請重新支付!"); 
  24.     return false
  25.   } 
  26.  
  27.   @Override 
  28.   public void dispenseCommodity() { 
  29.     System.out.println("請先完成支付!"); 
  30.   } 

商品售罄狀態類

 

  1. public class EmptyState implements State { 
  2.  
  3.   VendingMachine machine; 
  4.  
  5.   public EmptyState(VendingMachine machine) { 
  6.     this.machine = machine; 
  7.   } 
  8.  
  9.   @Override 
  10.   public void choose() { 
  11.     System.out.println("對不起商品已售罄!"); 
  12.   } 
  13.  
  14.   @Override 
  15.   public boolean payment() { 
  16.     System.out.println("對不起商品已售罄!"); 
  17.     return false
  18.   } 
  19.  
  20.   @Override 
  21.   public void dispenseCommodity() { 
  22.     System.out.println("對不起商品已售罄!"); 
  23.   } 

分發商品狀態類

 

  1. public class DispenseCommodityState implements State { 
  2.  
  3.   VendingMachine machine; 
  4.  
  5.   public DispenseCommodityState(VendingMachine machine) { 
  6.     this.machine = machine; 
  7.   } 
  8.  
  9.   @Override 
  10.   public void choose() { 
  11.     System.out.println("請及時取走您的商品!"); 
  12.   } 
  13.  
  14.   @Override 
  15.   public boolean payment() { 
  16.     System.out.println("請及時取走您的商品!"); 
  17.     return false
  18.   } 
  19.  
  20.   @Override 
  21.   public void dispenseCommodity() { 
  22.     System.out.println("請及時取走您的商品!"); 
  23.     machine.setState(machine.getChooseGoods()); 
  24.   } 

自動售貨機 => Context角色

 

  1. public class VendingMachine { 
  2.   // 表示當前狀態 
  3.   private State state = null
  4.   // 商品數量 
  5.   private int count = 0; 
  6.   private State chooseGoods = new ChooseGoods(this); 
  7.   private State paymentState = new PaymentState(this); 
  8.   private State dispenseCommodityState = new DispenseCommodityState(this); 
  9.   private State emptyState = new EmptyState(this); 
  10.  
  11.   public VendingMachine(int count) { 
  12.     this.count = count
  13.     this.state = this.getChooseGoods(); 
  14.   } 
  15.  
  16.   // 購買商品 
  17.   public void purchase() { 
  18.     // 挑選商品 
  19.     state.choose(); 
  20.     // 支付成功 
  21.     if (state.payment()) { 
  22.       // 分發商品 
  23.       state.dispenseCommodity(); 
  24.     } 
  25.   } 
  26.    
  27.   // 獲取商品后將商品減一 
  28.   public int getCount() { 
  29.     return count--; 
  30.   } 
  31.    
  32.   // get和set方法 ...  

客戶端測試類

 

  1. public class Client { 
  2.  
  3.   public static void main(String[] args) { 
  4.     VendingMachine machine = new VendingMachine(1); 
  5.     for (int i = 1; i < 4; i++) { 
  6.       System.out.println("第" + i + "次購買。"); 
  7.       machine.purchase(); 
  8.     } 
  9.   } 

執行結果

 

優秀程序員早就學會用“狀態模式”代替if-else了

 

總結

1、狀態模式將每個狀態所對應的行為封裝到一個類中,大大提高了代碼的可讀性。并且通過這樣的設計還可以消除多余的if-else語句,方便代碼的維護。

2、狀態模式符合“開閉原則”,容易增加和刪除狀態。

3、任何事情都有利弊,狀態模式也不例外。其最顯著的問題是,每個狀態都要對應一個類,當狀態過多時會產生大量的類,從而加大維護成本。

4、應用場景:當一個需求有很多狀態,并且狀態之間會進行轉換,不同狀態還對應不同的行為時就可以考慮使用“狀態模式”

責任編輯:華軒 來源: 今日頭條
相關推薦

2021-03-30 22:54:10

程序員IT互聯網

2022-07-11 08:16:55

策略模式if-else

2017-11-14 21:30:15

2014-08-29 11:09:44

程序員

2023-06-02 07:30:24

If-else結構流程控制

2009-07-03 16:07:58

2012-11-01 13:46:54

程序員

2020-07-17 13:01:44

If-Else代碼編程

2023-11-14 08:00:00

Angular前端開發

2020-03-09 11:14:25

程序員技術設計

2015-10-12 08:56:37

程序員成長法則

2014-06-27 09:17:53

程序員

2015-06-17 14:24:48

優秀程序員整潔代碼

2012-05-25 10:54:24

程序員

2021-05-29 07:32:14

優秀程序員代碼

2020-03-29 08:19:56

程序員代碼

2019-08-15 15:08:34

程序員開發工具

2018-05-29 22:38:49

AI程序員代碼

2022-01-13 10:45:59

if-else代碼Java
點贊
收藏

51CTO技術棧公眾號

无码av中文一区二区三区桃花岛| 国产精品一区毛片| 911精品国产一区二区在线| 一区二区三区四区久久| 99热这里只有精品在线观看| 最新成人av网站| 国产视频精品久久久| 三级在线免费看| 91极品在线| 成人aa视频在线观看| 国产97在线播放| 精品女人久久久| 99久久人爽人人添人人澡 | 狠狠色丁香婷婷综合影院| 在线欧美一区二区| 国产对白在线播放| 香蕉视频网站在线| 六月丁香婷婷色狠狠久久| 欧美二区乱c黑人| 亚洲午夜福利在线观看| 欧美大片1688网站| 亚洲午夜视频在线观看| 久久综合九色欧美狠狠| 91成年人视频| 亚洲人人精品| 精品国产视频在线| 亚洲av无码国产精品久久| 国产一区二区三区四区五区3d| 亚洲一区二区三区四区不卡| 日本不卡在线观看| 亚洲国产精品成人久久蜜臀| 国产视频一区三区| 久久精品99国产精品酒店日本| 国内自拍偷拍视频| 成人全视频在线观看在线播放高清| 亚洲一区二区av在线| 日本成人三级| 色综合视频在线| 国产一区二区三区黄视频| 日韩av色在线| 国产真实乱人偷精品视频| 欧美激情国产在线| 亚洲欧美精品一区| 国产伦精品一区二区三区88av| 欧美男男gaygay1069| 色综合欧美在线视频区| 欧美一级欧美一级| 黄色网址视频在线观看| 国产日韩欧美精品综合| 精品欧美一区二区久久久伦| 国产xxxx孕妇| 久久国产精品72免费观看| 97视频在线观看视频免费视频 | 中文字幕一区综合| 二区在线视频| 久久久五月婷婷| 久久久久久久久久久久久久久久av| 精品国产区一区二| 国产自产高清不卡| 成人黄色免费在线观看| 在线免费观看视频网站| 在线综合亚洲| 91av视频在线观看| www.国产高清| 99成人精品| 97视频免费看| 91九色丨porny丨肉丝| 亚洲欧洲午夜| 91精品国产乱码久久久久久久久 | 欧洲乱码伦视频免费| 亚洲理论在线a中文字幕| 中文字幕一区二区久久人妻网站| 国内精品国产成人国产三级粉色 | 久久久亚洲欧洲日产国码aⅴ| 四虎精品免费视频| 一区二区三区午夜探花| 久久综合色影院| 黄色一级视频在线观看| 激情欧美丁香| 97超级碰碰碰| 成人av网站在线播放| 日韩国产精品大片| 国产精品人成电影| 国产乱码精品一区二区| 国产一区在线不卡| 成人av片网址| 黄色成人一级片| 99国产精品久久久久久久久久久| 欧美日韩一区二| av网站无病毒在线| 亚洲视频 欧洲视频| 国产片侵犯亲女视频播放| 19禁羞羞电影院在线观看| 欧美性xxxxx极品| 狠狠热免费视频| 国产精品99久久免费| 精品国产露脸精彩对白| 成人免费网站黄| 首页国产精品| 欧美精品videossex88| 青青草av在线播放| 美女一区二区视频| julia一区二区中文久久94| 亚洲三区在线观看无套内射| 国产欧美一区二区精品性| 日本一区二区免费高清视频| 草美女在线观看| 在线一区二区三区四区五区 | 久久99精品一区二区三区三区| 国产成人97精品免费看片| 97成人在线观看| www.激情成人| 亚州欧美一区三区三区在线 | 5566成人精品视频免费| 最近中文字幕在线免费观看 | 国产又粗又猛视频| 亚洲视频www| 日本成人激情视频| 国产又粗又长视频| 91视频国产资源| 在线视频一二三区| 久久精品女人天堂av免费观看| 日韩一区二区在线看| 女人黄色一级片| 在线一区欧美| 国产精品一区二区欧美| 香蕉视频网站在线观看| 日本韩国欧美国产| 日韩精品人妻中文字幕有码| 中文在线日韩| 国产噜噜噜噜噜久久久久久久久| 欧美日韩国产中文字幕在线| 图片区小说区国产精品视频| 黑人巨大猛交丰满少妇| 亚洲成人99| 91精品国产自产在线老师啪| 国产在线黄色| 福利一区福利二区微拍刺激| 精品久久久久一区二区| 欧美日本二区| 99一区二区| 成人爽a毛片免费啪啪动漫| 日韩三级免费观看| 91视频免费在线看| 国产在线一区观看| 国产欧美综合一区| 在线播放成人| 欧美另类99xxxxx| 国产av无码专区亚洲av麻豆| 亚洲丝袜美腿综合| 超碰在线资源站| 欧美国产激情| 国产精品久久亚洲7777| 成人性生交大片免费看在线播放| 亚洲二区中文字幕| 国产精品999在线观看| 99国产精品久久久久久久久久久| av7777777| 国产一区二区三区日韩精品 | 日韩午夜视频在线| 日韩中文字幕在线| 国产欧美一级片| 亚洲主播在线观看| 日韩av手机在线播放| 亚洲专区欧美专区| 亚洲高清123| 国产精品欧美一区二区三区不卡| 欧美成人高清视频| 少妇av在线播放| 色噜噜狠狠一区二区三区果冻| 精品国产aaa| 国产在线视频不卡二| 日本黄大片在线观看| 欧洲在线一区| 国产精品美乳一区二区免费| 成人在线免费看片| 亚洲第一精品夜夜躁人人躁 | 91电影在线播放| 欧美精品少妇一区二区三区| 久久人人爽人人爽人人| 久久亚洲综合av| 超碰人人草人人| 一区在线免费| 午夜精品亚洲一区二区三区嫩草 | wwwww黄色| 国产高清亚洲一区| 免费在线观看亚洲视频| 欧美丰满日韩| 久久国产主播精品| 久久免费影院| 午夜精品久久17c| 1区2区3区在线观看| 精品少妇一区二区三区免费观看 | 正在播放亚洲一区| 五月婷婷亚洲综合| 中文字幕综合网| xxxx黄色片| 激情丁香综合五月| 日本熟妇人妻xxxxx| 欧美三区美女| 亚洲成人av中文| 男男做爰猛烈叫床爽爽小说| 日韩成人一区二区三区在线观看| 91免费版看片| 日韩欧美午夜| 久久一区二区三区欧美亚洲| 蜜桃精品视频| 国产免费一区二区三区在线观看| 免费在线小视频| 久久国产精品影片| 黄色美女网站在线观看| 精品久久人人做人人爱| 在线视频播放大全| 色999日韩国产欧美一区二区| 九九热视频精品| 亚洲欧洲av色图| 波多野结衣av在线观看| 成人国产亚洲欧美成人综合网| 激情黄色小视频| 蜜臀久久久99精品久久久久久| 久艹在线免费观看| 综合五月婷婷| 异国色恋浪漫潭| 青草国产精品| 日本午夜精品一区二区三区| 青青草原在线亚洲| 国产精选在线观看91| 榴莲视频成人app| 成人在线激情视频| 99久久er| 国产精品白嫩美女在线观看 | 亚洲综合另类小说| 强制高潮抽搐sm调教高h| 久久久国际精品| 一级国产黄色片| 91在线精品秘密一区二区| 国产精品一区二区在线免费观看| 国产剧情一区二区| 国产农村妇女精品久久| 韩国视频一区二区| 国产传媒免费观看| 国产综合久久久久久久久久久久| 亚洲黄色av片| 狠狠色丁香婷婷综合久久片| www.成人黄色| 狠狠色综合播放一区二区| 色综合五月婷婷| 国产盗摄精品一区二区三区在线| 国产精品一级无码| 懂色一区二区三区免费观看| jjzz黄色片| 成人av在线资源网| 内射中出日韩无国产剧情| 97aⅴ精品视频一二三区| 欧美丰满少妇人妻精品| 久久久精品国产免大香伊| 亚洲午夜久久久久久久国产| 欧美国产成人在线| 亚洲欧美卡通动漫| 亚洲免费观看高清完整版在线| 黄色一级片在线免费观看| 亚洲va欧美va人人爽午夜| 国产一级片毛片| 色悠悠亚洲一区二区| 懂色av蜜臀av粉嫩av喷吹 | 亚洲精品喷潮一区二区三区| 亚洲第一男人天堂| 暖暖视频在线免费观看| 少妇高潮久久久久久潘金莲| 日皮视频在线观看| 奇米4444一区二区三区| 在线一区视频观看| 亚洲综合日韩在线| 欧美美女在线直播| 日韩福利一区二区三区| 图片小说视频色综合| 久久综合久久网| 免费在线观看视频一区| 欧美高清精品一区二区| 99r国产精品| 久久精品色妇熟妇丰满人妻| 亚洲一区在线免费观看| www.国产一区二区| 91麻豆精品久久久久蜜臀| 欧美一级淫片免费视频魅影视频| 亚洲小视频在线观看| 成人福利在线观看视频| 日本欧美黄网站| 玖玖玖视频精品| 欧美中文娱乐网| 午夜日韩av| 99视频在线免费| 国产99久久久国产精品免费看| 久久亚洲AV成人无码国产野外| 亚洲图片激情小说| 国产精品久久久久久久久久久久久久久久久| 欧美日韩国产另类一区| 香蕉av在线播放| 欧美成人自拍视频| 天堂久久午夜av| 国产精品久久久久久久久婷婷| 四虎成人精品永久免费av九九| 成人免费播放器| 久久99国产乱子伦精品免费| 在线免费观看成年人视频| 亚洲精品国产精华液| 亚洲黄网在线观看| 亚洲福利影片在线| a篇片在线观看网站| 国产精品久久久999| 欧美日韩一区二区三区四区不卡 | 爽好久久久欧美精品| 久久久久国产免费| 亚洲日本乱码在线观看| 成人午夜精品视频| 精品一区二区三区电影| 黄色污污视频在线观看| 成人免费网站在线| 俺要去色综合狠狠| 久久精品99国产| 9色porny自拍视频一区二区| 国产亚洲第一页| 日韩情涩欧美日韩视频| 日本www在线观看视频| 日韩免费高清在线观看| 欧美黑白配在线| 国产精品333| www.在线成人| 日本三级免费看| 精品国产1区2区3区| 91在线中文| 亚洲淫片在线视频| 小小影院久久| 精品亚洲视频在线| 自拍偷拍国产亚洲| 国产视频第一页| 久久6免费高清热精品| 久久69av| 欧美a级免费视频| 国产电影一区二区三区| 欧美精品一区二区蜜桃| 日韩一区二区视频在线观看| 在线观看的网站你懂的| 99久久自偷自偷国产精品不卡| 久久久久亚洲| 欧美一级大片免费看| 亚洲一区二区三区在线看| 亚洲欧美黄色片| 性色av一区二区三区免费| 欧美大片网址| 亚洲人成色77777| 欧美激情综合五月色丁香| 日韩欧美国产另类| 日韩一二三在线视频播| 久久99成人| 给我免费播放片在线观看| 99re8在线精品视频免费播放| 国产精品一区二区6| 亚洲欧美成人网| 欧美成人三级| 日本精品福利视频| www.日本不卡| 天天干天天插天天射| www.亚洲免费视频| 午夜视频一区二区在线观看| 成人免费aaa| 国产午夜亚洲精品不卡| 一级淫片免费看| 久久69精品久久久久久久电影好| 欧美a一欧美| 少妇网站在线观看| 亚洲欧美二区三区| 五月婷婷激情在线| 国产精品三级网站| 欧美日韩久久| 国产精品毛片一区二区| 在线不卡中文字幕播放| 欧美xxxx少妇| 日韩av不卡播放| 国产一区二区三区精品欧美日韩一区二区三区 | 国外视频精品毛片| 欧美理论电影大全| 精品人妻人人做人人爽夜夜爽| 日韩欧美在线中文字幕| 免费a在线看| 久久综合一区| 国产传媒欧美日韩成人| 久久久久久久久久久久久av| 日韩在线激情视频| 欧美亚洲大陆| 日本中文字幕观看| 欧美日韩亚洲一区二| 黄网站免费在线观看| 久久久精品国产一区二区三区| 久久99精品久久只有精品| 成年人午夜视频| 欧美成人精品在线观看| 久久99精品久久久久久园产越南| 日日夜夜精品视频免费观看| 欧美在线观看视频在线|