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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

第1章 策略模式【StrategyPattern】

發(fā)布時(shí)間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第1章 策略模式【StrategyPattern】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

劉備要到江東娶老婆了,走之前諸葛亮給趙云(伴郎)三個(gè)錦囊妙計(jì),說是按天機(jī)拆開解決棘手問題,嘿,還別說,真是解決了大問題,搞到最后是周瑜陪了夫人又折兵呀,那咱們先看看這個(gè)場(chǎng)景是什么樣子的。

先說這個(gè)場(chǎng)景中的要素:三個(gè)妙計(jì),一個(gè)錦囊,一個(gè)趙云,妙計(jì)是小亮同志給的,妙計(jì)是放置在錦囊里,俗稱就是錦囊妙計(jì)嘛,那趙云就是一個(gè)干活的人,從錦囊中取出妙計(jì),執(zhí)行,然后獲勝,用 JAVA 程序怎么表現(xiàn)這個(gè)呢?我們先看類圖:

三個(gè)妙計(jì)是同一類型的東東,那咱就寫個(gè)接口:

package com.cbf4life.strategy;

/**
*
@author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
*
首先定一個(gè)策略接口,這是諸葛亮老人家給趙云的三個(gè)錦囊妙計(jì)的接口*
*/

public interface IStrategy {//每個(gè)錦囊妙計(jì)都是一個(gè)可執(zhí)行的算法

public void operate();}

4頁(yè)

然后再寫三個(gè)實(shí)現(xiàn)類,有三個(gè)妙計(jì)嘛:

package com.cbf4life.strategy;

/**
*
@author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.*
找喬國(guó)老幫忙,使孫權(quán)不能殺劉備
*/

public class BackDoor implements IStrategy {

public void operate() {System.out.println("找喬國(guó)老幫忙,讓吳國(guó)太給孫權(quán)施加壓力");

}}

package com.cbf4life.strategy;

/**
*
@author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.*
求吳國(guó)太開個(gè)綠燈
*/

public class GivenGreenLight implements IStrategy {

public void operate() {System.out.println("求吳國(guó)太開個(gè)綠燈,放行!");

}}

package com.cbf4life.strategy;

/**
*
@author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.*
孫夫人斷后,擋住追兵
*/

public class BlockEnemy implements IStrategy {public void operate() {

您的設(shè)計(jì)模式

5頁(yè)

您的設(shè)計(jì)模式

System.out.println("孫夫人斷后,擋住追兵");}

}

好了,大家看看,三個(gè)妙計(jì)是有了,那需要有個(gè)地方放這些妙計(jì)呀,放錦囊呀:

package com.cbf4life.strategy;

/**
*
@author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.*
計(jì)謀有了,那還要有錦囊
*/

public class Context {//構(gòu)造函數(shù),你要使用那個(gè)妙計(jì)
private IStrategy straegy;
public Context(IStrategy strategy){

this.straegy = strategy;}

//使用計(jì)謀了,看我出招了public void operate(){

this.straegy.operate();}

}

然后就是趙云雄赳赳的揣著三個(gè)錦囊,拉著已步入老年行列的、還想著娶純情少女的、色迷迷的劉老爺子去入贅了,嗨,還別說,小亮的三個(gè)妙計(jì)還真是不錯(cuò),瞅瞅:

package com.cbf4life.strategy;

/**
*
@author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.*/

public class ZhaoYun {/**

* 趙云出場(chǎng)了,他根據(jù)諸葛亮給他的交代,依次拆開妙計(jì)

*/

public static void main(String[] args) {Context context;

6頁(yè)

您的設(shè)計(jì)模式

//剛剛到吳國(guó)的時(shí)候拆第一個(gè)System.out.println("-----------剛剛到吳國(guó)的時(shí)候拆第一個(gè)-------------");context = new Context(new BackDoor()); //拿到妙計(jì)
context.operate(); //拆開執(zhí)行System.out.println("\n\n\n\n\n\n\n\n");

//劉備樂不思蜀了,拆第二個(gè)了System.out.println("-----------劉備樂不思蜀了,拆第二個(gè)了-------------");context = new Context(new GivenGreenLight());
context.operate();
//執(zhí)行了第二個(gè)錦囊了System.out.println("\n\n\n\n\n\n\n\n");

//孫權(quán)的小兵追了,咋辦?拆第三個(gè)

System.out.println("-----------孫權(quán)的小兵追了,咋辦?拆第三個(gè)-------------");

context = new Context(new BlockEnemy());context.operate(); //孫夫人退兵System.out.println("\n\n\n\n\n\n\n\n");

/**問題來了:趙云實(shí)際不知道是那個(gè)策略呀,他只知道拆第一個(gè)錦囊,

*而不知道是BackDoor這個(gè)妙計(jì),咋辦? 似乎這個(gè)策略模式已經(jīng)把計(jì)謀名稱寫出來了*

* 錯(cuò)!BackDoor、GivenGreenLightBlockEnemy只是一個(gè)代碼,你寫成firstsecond、third,沒人會(huì)說你錯(cuò)!

*

* 策略模式的好處就是:體現(xiàn)了高內(nèi)聚低耦合的特性呀,缺點(diǎn)嘛,這個(gè)那個(gè),我回去再查查

*/

}}

就這三招,搞的周郎是“陪了夫人又折兵”呀!這就是策略模式,高內(nèi)聚低耦合的特點(diǎn)也表現(xiàn)出來了,還有一個(gè)就是擴(kuò)展性,也就是 OCP 原則,策略類可以繼續(xù)增加下去,只要修改 Context.java 就可以了,這個(gè)不多說了,自己領(lǐng)會(huì)吧。


總結(jié)

以上是生活随笔為你收集整理的第1章 策略模式【StrategyPattern】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。