中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

的推網(wǎng)站模板百度帳號申請注冊

的推網(wǎng)站模板,百度帳號申請注冊,如何用網(wǎng)頁制作網(wǎng)站,做課件的網(wǎng)站有哪些簡介: 策略模式,它是一種行為型設(shè)計模式,它定義了算法族,分別封裝起來,讓它們之間可以互相替換。策略模式讓算法的變化獨立于使用算法的客戶,降低了耦合,增加了系統(tǒng)的可維護性和可擴展性。 策…

簡介:

策略模式,它是一種行為型設(shè)計模式,它定義了算法族,分別封裝起來,讓它們之間可以互相替換。策略模式讓算法的變化獨立于使用算法的客戶,降低了耦合,增加了系統(tǒng)的可維護性和可擴展性。

策略模式的結(jié)構(gòu)包括三種角色:
1、策略(Strategy):策略是一個接口,該接口定義了算法標(biāo)識。
2、具體策略(ConcreteStrategy):具體策略是實現(xiàn)策略接口的類,具體策略實現(xiàn)策略接口所定義的抽象方法,即給出算法標(biāo)識的具體算法。
3、上下文(Context):上下文是依賴于策略接口的類,即上下文包含有策略聲明的變量。上下文中提供了一個方法,該方法委托策略變量調(diào)用具體策略所實現(xiàn)的策略接口中的方法。

策略模式的使用場景:
1、針對同一類型問題的多種處理方式,但具體行為有差別時。
2、需要安全地封裝多種同一類型的操作時。
3、出現(xiàn)同一抽象類有多個子類,而又需要使用 if-else 或者 switch-case 來選擇具體子類時。
4、當(dāng)業(yè)務(wù)功能是客戶程序的一個難以分割的成分時,增加新的業(yè)務(wù)算法或改變現(xiàn)有算法將十分困難。
5、當(dāng)不同的時候需要不同的算法,我們不想支持我們并不使用的業(yè)務(wù)算法時。
6、當(dāng)算法使用了客戶不應(yīng)該知道的數(shù)據(jù)時。
7、當(dāng)一個類定義了很多行為,而且這些行為在這個類里的操作以多個條件語句的形式出現(xiàn)時。

總之,策略模式是一種非常實用的設(shè)計模式,可以用于封裝各種類型的規(guī)則,并且可以在不同的時間應(yīng)用不同的業(yè)務(wù)規(guī)則。

策略模式的創(chuàng)建步驟:
1、定義策略接口:首先需要定義一個策略接口,該接口中包含算法的方法。
2、創(chuàng)建具體策略類:根據(jù)策略接口,創(chuàng)建實現(xiàn)具體算法的類。
3、創(chuàng)建上下文類:上下文類負責(zé)維護和查詢策略對象,并在具體策略類中注入策略對象。
4、在上下文類中注入策略對象:通過構(gòu)造函數(shù)或者setter方法,將策略對象注入到上下文類中。
5、在客戶端中創(chuàng)建上下文對象:在客戶端中創(chuàng)建上下文對象,并將具體策略對象注入到上下文對象中。
6、客戶端調(diào)用上下文對象:客戶端通過上下文對象調(diào)用具體策略對象的方法,實現(xiàn)算法的調(diào)用。

以上是策略模式的基本創(chuàng)建步驟,具體實現(xiàn)方式可能會因語言和需求而有所不同。

策略模式的優(yōu)點,主要包括:
1、提供了對“開閉原則”的完美支持,可以在不修改原有系統(tǒng)的基礎(chǔ)上選擇算法或行為,也可以靈活地增加新的算法或行為。
2、提供了管理相關(guān)的算法族的辦法,恰當(dāng)使用繼承可以把算法族的公共代碼轉(zhuǎn)移到父類里面,從而避免重復(fù)的代碼。
3、提供了可以替換繼承關(guān)系的辦法,使得系統(tǒng)更加靈活和可維護。
4、使用策略模式可以避免使用多重條件轉(zhuǎn)移語句,如 if...else 語句、switch...case 語句。
5、可以提供相同行為的不同實現(xiàn),客戶可以根據(jù)不同時間或空間要求選擇不同的實現(xiàn)方式。

策略模式的缺點,主要包括:
1、客戶端必須知道所有的策略類,并自行決定使用哪一個策略類,這可能違反了“開閉原則”。
2、策略模式會造成產(chǎn)生很多策略類,增加了系統(tǒng)的復(fù)雜性和維護成本。
3、在實現(xiàn)上,策略模式需要使用繼承和多態(tài),這會增加代碼的復(fù)雜性和實現(xiàn)的難度。
4、在使用策略模式時,需要注意策略的正確性和穩(wěn)定性,因為不同的策略可能會對系統(tǒng)的行為產(chǎn)生不同的影響。

總之,策略模式雖然可以提高系統(tǒng)的靈活性和可維護性,但也存在一些缺點需要注意。在使用策略模式時,需要根據(jù)具體情況進行權(quán)衡和考慮。

示例:

一、C#策略模式

以下是一個示例,展示了如何在C#中實現(xiàn)策略模式:

//定義策略接口
public interface Strategy ?
{ ?void Execute(); ?
}
//創(chuàng)建具體策略類
public class ConcreteStrategyA : Strategy ?
{ ?public void Execute() ?{ ?Console.WriteLine("執(zhí)行策略A"); ?} ?
} ?public class ConcreteStrategyB : Strategy ?
{ ?public void Execute() ?{ ?Console.WriteLine("執(zhí)行策略B"); ?} ?
}
//創(chuàng)建上下文類
public class Context ?
{ ?private Strategy strategy; ?public Context(Strategy strategy) ?{ ?this.strategy = strategy; ?} ?public void SetStrategy(Strategy strategy) ?{ ?this.strategy = strategy; ?} ?public void DoSomething() ?{ ?strategy.Execute(); ?} ?
}
//在客戶端中創(chuàng)建上下文對象并注入具體策略對象
public class Client{public void Test(){Context context = new Context(new ConcreteStrategyA()); ?context.DoSomething(); ?// 輸出:執(zhí)行策略A ?context.SetStrategy(new ConcreteStrategyB()); ?context.DoSomething(); ?// 輸出:執(zhí)行策略B}
}

二、java策略模式

策略模式通常通過以下方式實現(xiàn):

//定義策略接口
public interface Strategy { ?void execute(); ?
}
//創(chuàng)建具體策略類
public class ConcreteStrategyA implements Strategy { ?@Override ?public void execute() { ?System.out.println("執(zhí)行策略A"); ?} ?
} ?public class ConcreteStrategyB implements Strategy { ?@Override ?public void execute() { ?System.out.println("執(zhí)行策略B"); ?} ?
}
//創(chuàng)建上下文類
public class Context { ?private Strategy strategy; ?public Context(Strategy strategy) { ?this.strategy = strategy; ?} ?public void setStrategy(Strategy strategy) { ?this.strategy = strategy; ?} ?public void doSomething() { ?strategy.execute(); ?} ?
}
//在客戶端中創(chuàng)建上下文對象并注入具體策略對象
public class Main { ?public static void main(String[] args) { ?Context context = new Context(new ConcreteStrategyA()); ?context.doSomething(); ?// 輸出:執(zhí)行策略A ?context.setStrategy(new ConcreteStrategyB()); ?context.doSomething(); ?// 輸出:執(zhí)行策略B}
}

三、javascript策略模式

在JavaScript中,策略實現(xiàn)方式如下:

//定義策略接口
function Strategy(execute) { ?this.execute = execute; ?
}
//創(chuàng)建具體策略類
class ConcreteStrategyA extends Strategy { ?constructor() { ?super(this.execute); ?} ?execute() { ?console.log('執(zhí)行策略A'); ?} ?
} ?class ConcreteStrategyB extends Strategy { ?constructor() { ?super(this.execute); ?} ?execute() { ?console.log('執(zhí)行策略B'); ?} ?
}
//創(chuàng)建上下文類
class Context { ?constructor(strategy) { ?this.strategy = strategy; ?} ?setStrategy(strategy) { ?this.strategy = strategy; ?} ?doSomething() { ?this.strategy.execute(); ?} ?
}//在客戶端中創(chuàng)建上下文對象并注入具體策略對象
const context = new Context(new ConcreteStrategyA()); ?
context.doSomething(); ?// 輸出:執(zhí)行策略A ?
context.setStrategy(new ConcreteStrategyB()); ?
context.doSomething(); ?// 輸出:執(zhí)行策略B

四、C++策略模式

以下是在C++中實現(xiàn)策略模式:

//定義策略接口
class Strategy { ?
public: ?virtual void execute() = 0; ?
};
//創(chuàng)建具體策略類
class ConcreteStrategyA : public Strategy { ?
public: ?void execute() override { ?cout << "執(zhí)行策略A" << endl; ?} ?
}; ?class ConcreteStrategyB : public Strategy { ?
public: ?void execute() override { ?cout << "執(zhí)行策略B" << endl; ?} ?
};
//創(chuàng)建上下文類
class Context { ?
public: ?Context(Strategy* strategy) : strategy_(strategy) {} ?void setStrategy(Strategy* strategy) { ?strategy_ = strategy; ?} ?void doSomething() { ?strategy_->execute(); ?} ?
private: ?Strategy* strategy_; ?
};
//在客戶端中創(chuàng)建上下文對象并注入具體策略對象
int main() { ?Context context(new ConcreteStrategyA()); ?context.doSomething(); ?// 輸出:執(zhí)行策略A ?context.setStrategy(new ConcreteStrategyB()); ?context.doSomething(); ?// 輸出:執(zhí)行策略B ?delete context.strategy_; ?delete context; ?return 0; ?
}

五、python策略模式

以下是在python中實現(xiàn)策略模式:

//定義策略接口
from abc import ABC, abstractmethod ?class Strategy(ABC): ?@abstractmethod ?def execute(self): ?pass//創(chuàng)建具體策略類
class ConcreteStrategyA(Strategy): ?def execute(self): ?print("執(zhí)行策略A") ?class ConcreteStrategyB(Strategy): ?def execute(self): ?print("執(zhí)行策略B")//創(chuàng)建上下文類
class Context: ?def __init__(self, strategy): ?self.strategy = strategy ?def set_strategy(self, strategy): ?self.strategy = strategy ?def do_something(self): ?self.strategy.execute()//在客戶端中創(chuàng)建上下文對象并注入具體策略對象
context = Context(ConcreteStrategyA()) ?
context.do_something() ?# 輸出:執(zhí)行策略A ?
context.set_strategy(ConcreteStrategyB()) ?
context.do_something() ?# 輸出:執(zhí)行策略B

六、go策略模式

以下是一個示例,展示了如何在go中實現(xiàn)策略模式:

//定義策略接口
type Strategy interface { ?Execute() ?
}
//創(chuàng)建具體策略類
type ConcreteStrategyA struct{} ?func (s *ConcreteStrategyA) Execute() { ?fmt.Println("執(zhí)行策略A") ?
} ?type ConcreteStrategyB struct{} ?func (s *ConcreteStrategyB) Execute() { ?fmt.Println("執(zhí)行策略B") ?
}
//創(chuàng)建上下文類
type Context struct { ?strategy Strategy ?
} ?func (c *Context) SetStrategy(strategy Strategy) { ?c.strategy = strategy ?
} ?func (c *Context) DoSomething() { ?c.strategy.Execute() ?
}
//在客戶端中創(chuàng)建上下文對象并注入具體策略對象
func main() { ?context := &Context{} ?context.SetStrategy(&ConcreteStrategyA{}) ?context.DoSomething() ?// 輸出:執(zhí)行策略A ?context.SetStrategy(&ConcreteStrategyB{}) ?context.DoSomething() ?// 輸出:執(zhí)行策略B ?
}

七、PHP策略模式

以下是一個示例,展示了如何在PHP中實現(xiàn)策略模式:

//定義策略接口
interface Strategy { ?public function execute(); ?
}
//創(chuàng)建具體策略類
class ConcreteStrategyA implements Strategy { ?public function execute() { ?echo "執(zhí)行策略A"; ?} ?
} ?class ConcreteStrategyB implements Strategy { ?public function execute() { ?echo "執(zhí)行策略B"; ?} ?
}
//創(chuàng)建上下文類
class Context { ?private $strategy; ?public function __construct(Strategy $strategy) { ?$this->strategy = $strategy; ?} ?public function setStrategy(Strategy $strategy) { ?$this->strategy = $strategy; ?} ?public function doSomething() { ?$this->strategy->execute(); ?} ?
}
//在客戶端中創(chuàng)建上下文對象并注入具體策略對象
$context = new Context(new ConcreteStrategyA()); ?
$context->doSomething(); ?// 輸出:執(zhí)行策略A ?
$context->setStrategy(new ConcreteStrategyB()); ?
$context->doSomething(); ?// 輸出:執(zhí)行策略B

通過以上步驟,我們實現(xiàn)了策略模式,使得算法可以獨立于使用它的客戶端,并且可以在不修改原有系統(tǒng)的基礎(chǔ)上選擇算法或行為。這種設(shè)計模式使得程序更加靈活和可維護。策略模式體現(xiàn)了開閉原則和里氏替換原則,各個策略實現(xiàn)都是兄弟關(guān)系,實現(xiàn)了同一個接口或者繼承了同一個抽象類。這樣只要使用策略的客戶端保持面向抽象編程,就可以動態(tài)地切換不同的策略實現(xiàn)以進行替換。

《完結(jié)》

http://www.risenshineclean.com/news/49779.html

相關(guān)文章:

  • 外貿(mào)商城網(wǎng)站網(wǎng)站建設(shè)合同模板
  • 龍門惠州網(wǎng)站建設(shè)如何申請一個網(wǎng)站域名
  • 網(wǎng)站建設(shè)實錄活動推廣宣傳方案
  • 英文營銷網(wǎng)站 知乎seo長尾關(guān)鍵詞排名
  • 電子商務(wù)網(wǎng)站建設(shè)實用教程教案黃頁88推廣多少錢一年
  • php 網(wǎng)站建設(shè)方案內(nèi)容營銷案例
  • 幫別人起名 做ppt的網(wǎng)站做百度推廣怎么做才能有電話
  • 網(wǎng)站版面在線設(shè)計愛站權(quán)重查詢
  • 網(wǎng)站建設(shè)的功能都需要有哪些方面網(wǎng)圖識別在線百度
  • 客戶做網(wǎng)站一定報價怎么辦網(wǎng)站推廣的方式有
  • 政府網(wǎng)站群整合建設(shè)方案營銷方法
  • 做刷單網(wǎng)站犯法嗎新開店鋪怎么做推廣
  • 一建報名時間2023廣州seo優(yōu)化推廣
  • .net 網(wǎng)站開發(fā)教程中山谷歌推廣
  • wordpress只能打開首頁淘寶seo搜索優(yōu)化工具
  • 給別人做網(wǎng)站別人違法經(jīng)營優(yōu)化關(guān)鍵詞有哪些方法
  • 杭州市建設(shè)工程質(zhì)量安全監(jiān)督總站網(wǎng)站信陽seo優(yōu)化
  • 動態(tài)網(wǎng)站seo免費網(wǎng)站服務(wù)器
  • wordpress設(shè)置郵件提醒網(wǎng)站優(yōu)化排名優(yōu)化
  • 網(wǎng)站建設(shè)銷售銷售流程百度競價客服
  • 手機版微網(wǎng)站網(wǎng)推拉新app推廣平臺
  • 如何建設(shè)簡易網(wǎng)站他達拉非片
  • 為什么做織夢網(wǎng)站時圖片出不來網(wǎng)絡(luò)策劃書范文
  • 佛山網(wǎng)站推廣市場中級經(jīng)濟師考試
  • 阿里云空間如何安裝wordpressseo快速排名軟件
  • 優(yōu)酷wordpress建站教程百度引擎提交入口
  • icann官方網(wǎng)站常用的網(wǎng)絡(luò)營銷方法
  • 新聞類網(wǎng)站源碼windows 優(yōu)化大師
  • 深圳網(wǎng)絡(luò)優(yōu)化公司哈爾濱怎樣關(guān)鍵詞優(yōu)化
  • 如何建網(wǎng)站費用多少武漢seo網(wǎng)站排名