国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

架構師備戰軟件工程之行為型設計模式

開發 前端
狀態模式和策略模式很類似,簡直就是親兄弟一樣。而訪問者模式其實和觀察者模式也很類似。所以我們的設計模式設計到最后,可能就會存在一種模式里有另一種模式的影子。所以我們要搞清楚它們之間的區別。

1、狀態模式

簡要說明

允許一個對象在其內部改變時改變它的行為

速記關鍵字

狀態變成類

類圖如下

狀態模式主要用來解決對象在多種狀態轉換時,需要對外輸出不同的行為的問題。比如訂單從待付款到待收貨的咋黃臺發生變化,執行的邏輯是不一樣的。

所以我們將狀態抽象為一個接口或者抽象類,對不同狀態進行封裝成單獨的實體,用于實現各種狀態處理的邏輯。

再設計一個上下文類,它組合了狀態接口,用于發送請求。針對不同的狀態提供不同的處理方法即可。

Java代碼實現

/**
* 狀態接口 提供處理狀態的方法
*/
public interface IState {

// 處理狀態,交給實現類實現
void handleState();
}

/**
* 未付款狀態
*/
public class UnpaidState implements IState{
@Override
public void handleState() {
System.out.println("下單成功,訂單狀態為待付款");
}
}

/**
* 已付款狀態
*/
public class PaidState implements IState{
@Override
public void handleState() {
System.out.println("支付成功,訂單狀態為已付款");
}
}

/**
* 已取消狀態
*/
public class CancelState implements IState{
@Override
public void handleState() {
System.out.println("訂單取消支付,訂單狀態為已取消");
}
}

/**
* 訂單狀態上下文類
*/
public class Context {
// 組合訂單狀態
private final IState state;

public Context(IState state) {
this.state = state;
}

// 提供處理訂單方法
public void handleOrderByState(){
state.handleState();
}
}

/**
* 測試類
*/
public class Client {
public static void main(String[] args) {
// 創建上下文并創建未支付狀態
Context context = new Context(new UnpaidState());
context.handleOrderByState();

// 創建上下文并創建已支付狀態
Context context2 = new Context(new PaidState());
context2.handleOrderByState();
}
}

結果輸出

其實我們可以看出來,狀態模式和策略模式非常像,都有一個Context類,都有一個接口或抽象類被Context組合。而后抽象類或接口有自己的不同實現。

它們確實很像,但是它們確實有區別,因為狀態模式圍繞著狀態的變化,它的子類之間的狀態是可以進行轉換的,比如訂單狀態由未付款變為已付款。但是策略模式則不會,只會二者取其一,進行一種策略操作。

2、訪問者模式

簡要說明

表示一個作用域某對象結構中的個元素的操作,使得在不改變各元素的前提下定義作用域這些元素的新操作。

速記關鍵字

數據與操作分離

類圖如下

角色說明

  • Visitor(抽象訪問者):為每種具體的被訪問者(ConcreteElement)聲明一個訪問操作
  • ConcreteVisitor(具體訪問者):實現對被訪問者(ConcreteElement)的具體訪問操作,所以需要組合多個元素,也就是組合一組元素集合
  • Element(抽象被訪問者):通常有一個Accept方法,用來接收/引用一個抽象訪問者對象(基本原理)
  • ConcreteElement(具體被訪問者對象):實現Accept抽象方法,通過傳入的具體訪問者參數、調用具體訪問者對該對象的訪問操作方法實現訪問邏輯
  • Clent、ObjectStructure(客戶端訪問過程測試環境):該過程中,被訪問者通常為一個集合對象,通過對集合的遍歷完成訪問者對每一個被訪問元素的訪問操作;

Java代碼實現

/**
* 定義被訪問接口
*/
public interface Person {
// 提供一個方法,讓訪問者可以訪問
void accept(Action action);
}

/**
* 訪問者,這里提供了多個訪問方法,從而獲取多個不同的訪問結果,它們的參數分別對應具體的被訪問元素
*/
public interface Action {
// 得到男性 的測評
void getManResult(Man man);

// 得到女的 測評
void getWomanResult(Woman woman);
}

/**
* 被訪問者元素男人實現,傳入自己給訪問者訪問
*/
public class Man implements Person{
@Override
public void accept(Action action) {
action.getManResult(this);
}
}

/**
* 被訪問者元素女人實現,傳入自己給訪問者訪問
*/
public class Woman implements Person{
@Override
public void accept(Action action) {
action.getWomanResult(this);
}
}

/**
* 訪問者實現類 對不同的被訪問元素做不同的訪問
*/
class Success implements Action {

@Override
public void getManResult(Man man) {
System.out.println("男人給的評價: 歌手很表演很nice");
}

@Override
public void getWomanResult(Woman woman) {
System.out.println("女人給的評價: 歌手很表演很nice");
}
}

class Normal implements Action {
@Override
public void getManResult(Man man) {
System.out.println("男人給的評價是: 歌手很表演比較普通");
}

@Override
public void getWomanResult(Woman woman) {
System.out.println("女人給的評價是: 歌手很表演比較普通");
}
}

public class Fail implements Action {
@Override
public void getManResult(Man man) {
System.out.println("男人給的評價: 歌手很表演有點糟糕");
}

@Override
public void getWomanResult(Woman woman) {
System.out.println("女人給的評價: 歌手很表演有點糟糕");
}
}

/**
* 數據結構,管理很多人(Man , Woman)
*/
class ObjectStructure {
//維護了一個集合
private List<Person> persons = new LinkedList<>();

//添加
public void add(Person p) {
persons.add(p);
}

//刪除
public void delete(Person p) {
persons.remove(p);
}

// 顯示測評情況(便利)
public void show(Action action) {
for (Person p : persons) {
p.accept(action);
}
}
}

/**
* 測試類
*/
public class Client {
public static void main(String[] args) {
// 使用數據結構來創建
ObjectStructure os = new ObjectStructure();
// 添加我們我們的訪問者
os.add(new Man());
os.add(new Woman());


// 創建成功的被訪問者
Success success = new Success();
// 通過數據結果遍歷訪問者,然后進行訪問成功的數據
os.show(success);
System.out.println("========================");

// 創建失敗的被訪問者
Fail fail = new Fail();
// 通過數據結果遍歷訪問者,然后進行訪問失敗的數據
os.show(fail);
System.out.println("========================");

// 創建中肯的的被訪問者
Normal normal = new Normal();
os.show(normal);
}
}

其實訪問者模式和觀察者模式的思想也非常類似,代碼實現也很類似。都會提供一個管理被訪問者/觀察者集合,提供新增和刪除方法,并且提供一個遍歷集合的方法,并通知所有元素或者指定元素的方法。

它們只是應用場景不一樣,其實類圖都很類似。

結果輸出

3、小結

其實我們可以看出,狀態模式和策略模式很類似,簡直就是親兄弟一樣。而訪問者模式其實和觀察者模式也很類似。所以我們的設計模式設計到最后,可能就會存在一種模式里有另一種模式的影子。所以我們要搞清楚它們之間的區別。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2011-10-10 10:10:14

2009-11-04 10:57:35

2011-08-30 10:03:59

軟件工程

2022-11-09 07:18:18

驅動測試BDD

2012-12-13 09:47:15

軟件架構師架構師

2011-04-07 16:20:24

軟件架構師架構師架構

2022-01-16 07:12:30

軟件工程師吵架開發

2023-06-05 10:07:13

軟件工程平臺工程師

2022-10-19 15:34:11

架構軟件安全

2023-10-23 11:49:59

2020-08-28 13:20:53

谷歌Android開發者

2009-02-11 13:15:54

軟件工程師女工程師google

2009-02-12 14:45:17

軟件工程師

2014-08-20 10:24:11

軟件工程師

2013-09-03 09:30:44

軟件工程師軟件工程師頭銜

2022-09-16 08:00:00

軟件工程師求職薪酬

2010-08-10 13:29:58

軟件工程師

2021-10-22 08:00:00

架構開發技術

2022-07-29 09:12:44

軟件硬件開發

2022-04-18 10:13:32

軟件開發寫作
點贊
收藏

51CTO技術棧公眾號

国产特级嫩嫩嫩bbb| 51精品久久久久久久蜜臀| 黄色污污视频在线观看| 91亚色免费| 精品久久久久久久久久久久| 禁果av一区二区三区| 宅男午夜在线| 国产在线视频91| 在线看日韩精品电影| 国产农村妇女毛片精品久久莱园子| 六十路在线观看| 久久久久综合一区二区三区| 欧美日韩久久久一区| 天堂资源在线中文精品| 蜜桃在线视频| 国内精品在线观看视频| 欧美成人免费在线观看| 欧美国产日韩精品免费观看| 国产免费裸体视频| 蜜臀视频一区二区三区| 日本久久久久久久| 欧美日韩黄色一区二区| 国产日韩欧美高清免费| www国产精品| 男人的天堂在线视频免费观看| 日本三级免费观看| 女同一区二区| 色综合视频一区中文字幕| 日韩第一区第二区| 亚洲中文字幕无码不卡电影| 欧美好骚综合网| 亚洲精品不卡在线观看| 欧美精品videosex极品1| 久久日韩精品一区二区五区| 精品三级国产| 乱小说综合网站| 国产精品video| 色综合天天综合网天天看片| 欧美一区国产在线| 免费av在线网址| 日韩欧美国产二区| 亚洲无线码在线一区观看| 久久一留热品黄| 国产成人激情小视频| 欧美xxxxxxxx| 色综合视频在线观看| 久久亚洲色图| 亚洲+小说+欧美+激情+另类| 69堂精品视频在线播放| 丰乳肥臀在线| 97在线视频免费观看完整版| 国产精品毛片在线| 国产一二区在线观看| 一区二区日本| 日韩在线精品视频| 78精品国产综合久久香蕉| 97在线播放视频| 国产精品中文在线| 日韩欧美成人一区二区| 国产日产精品1区| 欧美国产三级| www.久久99| 在线观看免费国产小视频| 欧美二区在线| 欧美成人精品h版在线观看| 五月婷婷综合在线| 99久久婷婷这里只有精品 | 亚洲影院免费观看| 好看的日韩av电影| 日韩av一卡| 男人j桶女人的网站| 精品无人区一区二区三区竹菊 | 97在线看免费观看视频在线观看| 亚洲成在人线免费| 国产精品久久久久高潮| 国产亚洲自拍偷拍| 亚洲精品在线视频观看| 杨幂一区欧美专区| 91精品视频观看| 日本中文字幕一区| 亚洲系列另类av| av免费网站在线| 少妇无码av无码专区在线观看 | 美日韩丰满少妇在线观看| 狠狠躁夜夜躁久久躁别揉| 国产一区二区三区视频在线播放| 日韩啪啪网站| 欧美精品一区二区三区涩爱蜜| 丝袜综合欧美| 牛牛国产精品| 国产jizzjizz一区二区| 国产亚洲精品免费| 亚洲a一区二区| 欧美精品久久久久久久多人混战| 日韩成人激情在线| 7777免费精品视频| 极品粉嫩饱满一线天在线| 国产精品亚洲综合| 麻豆91在线观看| 精品一区二区三| 欧美日韩尤物久久| 黄色在线视频网站| igao视频网在线视频| www国产黄色| 日韩精品不卡| 国产精品女主播视频| 最近2019年日本中文免费字幕| 欧美撒尿777hd撒尿| 亚洲免费观看高清在线观看| 国产激情视频一区二区三区欧美| 欧美一区=区| 天天天综合网| 亚洲一区二区三区在线免费| 91超碰国产在线| 欧洲天堂在线观看| 免费在线看污| 羞羞在线观看网站| www.99com| 欧美亚洲一二三区| 欧美精品久久久久久久自慰| 日韩精品久久一区| 欧美日韩亚洲一区二区三区在线观看| 国产日韩欧美夫妻视频在线观看 | 亚洲影院天堂中文av色| 亚洲一区导航| 国产极品在线观看| 青春草免费在线视频| 青青草免费在线| 色av男人的天堂免费在线| 男女无套免费网站| 日本精品久久久久久久久久| 久久久久久九九九九| 黄色在线网站| 亚洲男人影院| 日韩福利视频在线观看| 国产精品二区三区四区| 黄色av地址| 欧美精品密入口播放| 久久人人爽人人爽| 久久久国产精彩视频美女艺术照福利 | 我看黄色一级片| 激情综合网俺也去| 欧美又粗又长又爽做受| 国产主播一区二区三区四区| 亚洲精品亚洲人成人网| 2020国产成人综合网| 国产亚洲欧美色| 99久久国产综合色|国产精品| 99re这里只有精品首页| 成人美女视频在线看| 久久精品男人天堂av| 久久毛片高清国产| 麻豆精品视频在线观看免费| 亚洲一区网站| 亚洲黄色大片| 麻豆一区二区三| 蜜桃91丨九色丨蝌蚪91桃色| 国产一区二区免费在线| 韩国女主播成人在线观看| 成人一级片在线观看| 不卡的av电影| 国产精品99久久久久久久vr| 91网站在线播放| 日本一区二区成人| 欧美午夜无遮挡| 欧美日韩国产乱码电影| 亚洲精品v天堂中文字幕| 日韩av在线一区| 另类天堂视频在线观看| 欧美精品福利在线| 成人黄色免费网站在线观看| 成人性生交大片免费看视频直播| 国产一区在线免费| 日本不卡一区二区三区在线观看| 99er在线视频| 日日碰狠狠躁久久躁婷婷| 国产免费视频| 在线成年人视频| 里番在线观看网站| 国产精品蜜臀av| 很污的网站在线观看| 91精品成人| 日韩在线www| 岳毛多又紧做起爽| 亚洲自啪免费| 欧美综合第一页| 国产偷倩在线播放| 亚洲一区二区在线视频| www日韩视频| 国产综合18久久久久久| 亚洲免费av网| 激情五月开心婷婷| 被下部羞羞漫画| 麻豆影视在线| 美女高潮视频在线看| 不卡的国产精品| 欧美日韩在线观看视频小说| 久久精品网址| 91蝌蚪porny| 欧美精品系列|