java策略模式實例代碼,策略模式應用實例

java中幾種常見的設計模式

一共23種設計模式!

廣陽ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

按照目的來分,設計模式可以分為創(chuàng)建型模式、結構型模式和行為型模式。

創(chuàng)建型模式用來處理對象的創(chuàng)建過程;結構型模式用來處理類或者對象的組合;行為型模式用來對類或對象怎樣交互和怎樣分配職責進行描述。

創(chuàng)建型模式用來處理對象的創(chuàng)建過程,主要包含以下5種設計模式:

? 工廠方法模式(Factory Method Pattern)

? 抽象工廠模式(Abstract Factory Pattern)

? 建造者模式(Builder Pattern)

? 原型模式(Prototype Pattern)

? 單例模式(Singleton Pattern)

結構型模式用來處理類或者對象的組合,主要包含以下7種設計模式:

? 適配器模式(Adapter Pattern)

? 橋接模式(Bridge Pattern)

? 組合模式(Composite Pattern)

? 裝飾者模式(Decorator Pattern)

? 外觀模式(Facade Pattern)

? 享元模式(Flyweight Pattern)

? 代理模式(Proxy Pattern)

行為型模式用來對類或對象怎樣交互和怎樣分配職責進行描述,主要包含以下11種設計模式:

? 責任鏈模式(Chain of Responsibility Pattern)

? 命令模式(Command Pattern)

? 解釋器模式(Interpreter Pattern)

? 迭代器模式(Iterator Pattern)

? 中介者模式(Mediator Pattern)

? 備忘錄模式(Memento Pattern)

? 觀察者模式(Observer Pattern)

? 狀態(tài)模式(State Pattern)

? 策略模式(Strategy Pattern)

? 模板方法模式(Template Method Pattern)

? 訪問者模式(Visitor Pattern)

推薦你一本好書:《軟件秘笈:設計模式那點事》,里面講解的23中設計模式例子很生動,容易理解,還有JDK中設計模式應用情況,看了收獲挺大的!百度里面搜“設計模式”,第一條中設計模式百度百科中就有首推該圖書,瀏覽量在20幾萬以上的,不會錯的。好東西大家一起分享!

祝你早日學會設計模式!

java策略模式與接口直接實現

我是一個java初學者,我下面寫的東西都是我個人的猜想,樓主可以作為參考,但不要相信。--------感覺由context包裝以后的耦合性更低一些,傳入不同的new AddStrategy(),context.calculate(10, 5)會實現不同的功能,通過這樣的方式,如果通過配置文件的方式來實現對算法的配置,直接利用接口就把代碼寫死了,而策略模式由于具有低耦合性就可以通過配置對象來配置不同的算法。。

Java中,狀態(tài)模式和策略模式的區(qū)別

策略模式通過封裝一組相關算法,為Client提供運行時的靈活性。Client可以在運行時,選擇任一算法,而不改變使用算法的Context。一些流行的策略模式的例子是寫那些使用算法的代碼,例如加密算法、壓縮算法、排序算法。另一方面,狀態(tài)模式允許對象,在不同的狀態(tài)擁有不同的行為。因為現實世界中的對象通常都是有狀態(tài)的,所以在不同狀態(tài),行為也不一樣。例如,VM(自動售貨機)只在hasCoin狀態(tài)才給吐商品;不投幣,是不會吐的。現在可以清楚的看出不同之處了:意圖是不同的。狀態(tài)模式幫助對象管理狀態(tài),而策略模式允許Client選擇不同的行為。

另一個不那么容易能看出來的區(qū)別是:是誰促使了行為的改變。策略模式中,是Client提供了不同的策略給Context;狀態(tài)模式中,狀態(tài)轉移由Context或State管理。另外,如果在State中管理狀態(tài)轉移,那么必須持有Context的引用。例如,在VM的例子中,State對象需要調用VM的setState()方法去改變的狀態(tài)。另一方面,Strategy從不持有Context的引用,是Client把所選擇的Strategy傳遞給Context。由于狀態(tài)模式和策略模式的區(qū)別,是流行的Java設計原則類面試題之一,將會在本文探討在Java中,狀態(tài)模式和策略模式的異同,這可以加深理解。

(1)相似之處

看看狀態(tài)模式和策略模式的UML圖,就會發(fā)現結構非常相似。使用State對象改變自己行為的對象被稱為Context對象;相似的,使用Strategy對象改變自己行為的對象叫Context對象。記住,Client和Context打交道。在狀態(tài)模式中,Context把方法調用委托給當前的狀態(tài)對象,而在策略模式中,Context使用的Strategy對象,是被當做參數傳遞過來的,或在Context對象被創(chuàng)建時就被提供的。

這是專為經典的VM問題而設計的狀態(tài)模式UML類圖??梢钥闯?,VM的狀態(tài)是個接口,表示不同狀態(tài)的具體實現。每一個狀態(tài)都持有Context的引用,用來管理由Context觸發(fā)的行為導致的狀態(tài)轉移。

這是專為實現排序功能而設計的策略模式UML類圖。因為存在很多排序算法,該模式讓Client在排序時選擇適當的算法。事實上,Java的集合框架就使用這個模式,實現了用來排序的Collections.sort()方法。不同的是,不允許Client選擇排序算法,而是讓傳遞Comparator或Comparable接口的實例來指定比較策略。

(2)不同之處

策略模式封裝了一組相關算法,允許Client在運行時使用可互換的行為;狀態(tài)模式幫助一個類在不同的狀態(tài)顯示不同的行為。

狀態(tài)模式封裝了對象的狀態(tài),而策略模式封裝算法或策略。因為狀態(tài)是跟對象密切相關的,不能被重用;而通過從Context中分離出策略或算法,可以重用。

在狀態(tài)模式中,每個狀態(tài)通過持有Context的引用,來實現狀態(tài)轉移;但是每個策略都不持有Context的引用,只是被Context使用。

策略實現可以作為參數傳遞給使用的對象,例如Collections.sort(),參數包含一個Comparator策略。另一方面,狀態(tài)是Context對象自己的一部分,隨著時間的推移,Context對象從一個狀態(tài)轉移到另一個狀態(tài)。

雖然都符合OCP原則,策略模式也符合SRP原則(單一職責原則),因為每個策略都封裝自己的算法,且不依賴其他策略。一個策略的改變,并不會導致其他策略的變化。

另一個理論上的不同:策略模式定義了對象“怎么做”的部分。例如,排序對象怎么對數據排序。狀態(tài)模式定義了對象“是什么”和“什么時候做”的部分。例如,對象處于什么狀態(tài),什么時候處在某個特定的狀態(tài)。

狀態(tài)模式中很好的定義了狀態(tài)轉移的次序;而策略模式并無此需要:Client可以自由的選擇任何策略。

一些常見的策略模式的例子是封裝算法,例如排序算法,加密算法或者壓縮算法。如果看到代碼需要使用不同類型的相關算法,那么考慮使用策略模式吧。而識別何時使用狀態(tài)模式是很簡單的:如果需要管理狀態(tài)和狀態(tài)轉移,但不想使用大量嵌套的條件語句,那么就是了。

最后但最重要的一個不同之處是,策略的改變由Client完成;而狀態(tài)的改變,由Context或狀態(tài)自己。

JAVA23種設計模式

設計模式主要分三個類型:創(chuàng)建型、結構型和行為型。

其中創(chuàng)建型有:

一、Singleton,單例模式:保證一個類只有一個實例,并提供一個訪問它的全局訪問點

二、Abstract Factory,抽象工廠:提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無須指定它們的具體類。

三、Factory Method,工廠方法:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類,Factory Method使一個類的實例化延遲到了子類。

四、Builder,建造模式:將一個復雜對象的構建與他的表示相分離,使得同樣的構建過程可以創(chuàng)建不同的表示。

五、Prototype,原型模式:用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型來創(chuàng)建新的對象。

行為型有:

六、Iterator,迭代器模式:提供一個方法順序訪問一個聚合對象的各個元素,而又不需要暴露該對象的內部表示。

七、Observer,觀察者模式:定義對象間一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知自動更新。

八、Template Method,模板方法:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中,TemplateMethod使得子類可以不改變一個算法的結構即可以重定義該算法得某些特定步驟。

九、Command,命令模式:將一個請求封裝為一個對象,從而使你可以用不同的請求對客戶進行參數化,對請求排隊和記錄請求日志,以及支持可撤銷的操作。

十、State,狀態(tài)模式:允許對象在其內部狀態(tài)改變時改變他的行為。對象看起來似乎改變了他的類。

十一、Strategy,策略模式:定義一系列的算法,把他們一個個封裝起來,并使他們可以互相替換,本模式使得算法可以獨立于使用它們的客戶。

十二、China of Responsibility,職責鏈模式:使多個對象都有機會處理請求,從而避免請求的送發(fā)者和接收者之間的耦合關系

十三、Mediator,中介者模式:用一個中介對象封裝一些列的對象交互。

十四、Visitor,訪問者模式:表示一個作用于某對象結構中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用于這個元素的新操作。

十五、Interpreter,解釋器模式:給定一個語言,定義他的文法的一個表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。

十六、Memento,備忘錄模式:在不破壞對象的前提下,捕獲一個對象的內部狀態(tài),并在該對象之外保存這個狀態(tài)。

結構型有:

十七、Composite,組合模式:將對象組合成樹形結構以表示部分整體的關系,Composite使得用戶對單個對象和組合對象的使用具有一致性。

十八、Facade,外觀模式:為子系統(tǒng)中的一組接口提供一致的界面,fa?ade提供了一高層接口,這個接口使得子系統(tǒng)更容易使用。

十九、Proxy,代理模式:為其他對象提供一種代理以控制對這個對象的訪問

二十、Adapter,適配器模式:將一類的接口轉換成客戶希望的另外一個接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些類可以一起工作。

二十一、Decrator,裝飾模式:動態(tài)地給一個對象增加一些額外的職責,就增加的功能來說,Decorator模式相比生成子類更加靈活。

二十二、Bridge,橋模式:將抽象部分與它的實現部分相分離,使他們可以獨立的變化。

二十三、Flyweight,享元模式

23種設計模式要在這里詳細的都說一遍內容實在太多了啊,推薦你一本好書《軟件秘笈:設計模式那點事》,里面講解的23中設計模式例子很生動,容易理解,還有JDK中設計模式應用情況,看了收獲挺大的!百度里面搜“設計模式”,第一條中設計模式百度百科中就有首推該圖書,瀏覽量在20幾萬以上的,不會錯的。

祝你早日學會設計模式!

java策略模式和工廠模式的區(qū)別

工廠模式是創(chuàng)建型模式

策略模式是行為性模式

一個關注對象創(chuàng)建

一個關注行為的封裝

策略模式就是定義一系列的算法,這些算法可以在需要的時候替換和擴展.工廠模式是生成型的模式,在你需要的時候構建具體的實例.

在下面的情況下應當考慮使用策略模式:

1. 如果在一個系統(tǒng)里面有許多類,它們之間的區(qū)別僅在于它們的行為,那么使用策略模式可以動態(tài)地讓一個對象在許多行為中選擇一種行為。

2.

一個系統(tǒng)需要動態(tài)地在幾種算法中選擇一種。那么這些算法可以包裝到一個個的具體算法類里面,而這些具體算法類都是一個抽象算法類的子類。換言之,這些具體

算法類均有統(tǒng)一的接口,由于多態(tài)性原則,客戶端可以選擇使用任何一個具體算法類,并只持有一個數據類型是抽象算法類的對象。

3. 一個系統(tǒng)的算法使用的數據不可以讓客戶端知道。策略模式可以避免讓客戶端涉及到不必要接觸到的復雜的和只與算法有關的數據。

4. 如果一個對象有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇語句來實現。此時,使用策略模式,把這些行為轉移到相應的具體策略類里面,就可以避免使用難以維護的多重條件選擇語句,并體現面向對象設計的概念。

策略模式的優(yōu)點和缺點

策略模式有很多優(yōu)點和缺點。它的優(yōu)點有:

1. 策略模式提供了管理相關的算法族的辦法。策略類的等級結構定義了一個算法或行為族。恰當使用繼承可以把公共的代碼移到父類里面,從而避免重復的代碼。

2.

策略模式提供了可以替換繼承關系的辦法。繼承可以處理多種算法或行為。如果不是用策略模式,那么使用算法或行為的環(huán)境類就可能會有一些子類,每一個子類提

供一個不同的算法或行為。但是,這樣一來算法或行為的使用者就和算法或行為本身混在一起。決定使用哪一種算法或采取哪一種行為的邏輯就和算法或行為的邏輯

混合在一起,從而不可能再獨立演化。繼承使得動態(tài)改變算法或行為變得不可能。

3. 使用策略模式可以避免使用多重條件轉移語句。多重轉移語句不易維護,它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起,統(tǒng)統(tǒng)列在一個多重轉移語句里面,比使用繼承的辦法還要原始和落后。

策略模式的缺點有:

1. 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。這就意味著客戶端必須理解這些算法的區(qū)別,以便適時選擇恰當的算法類。換言之,策略模式只適用于客戶端知道所有的算法或行為的情況。

2. 策略模式造成很多的策略類。有時候可以通過把依賴于環(huán)境的狀態(tài)保存到客戶端里面,而將策略類設計成可共享的,這樣策略類實例可以被不同客戶端使用。換言之,可以使用享元模式來減少對象的數量。

策略模式與很多其它的模式都有著廣泛的聯系。Strategy很容易和Bridge模式相混淆。雖然它們結構很相似,但它們卻是為解決不同的問題

而設計的。Strategy模式注重于算法的封裝,而Bridge模式注重于分離抽象和實現,為一個抽象體系提供不同的實現。Bridge模式與

Strategy模式都很好的體現了"Favor composite over inheritance"的觀點。

網站欄目:java策略模式實例代碼,策略模式應用實例
網站鏈接:http://m.kartarina.com/article8/hddcip.html

成都網站建設公司_創(chuàng)新互聯,為您提供品牌網站建設、外貿建站云服務器、軟件開發(fā)、微信公眾號、虛擬主機

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

手機網站建設
主站蜘蛛池模板: 国产成人无码精品久久二区三区| 青青草无码免费一二三区| 精品久久久久久无码专区不卡| 秋霞无码一区二区| 无码成人AAAAA毛片| 亚洲欧洲无码一区二区三区| 亚洲日韩国产精品无码av| 毛片一区二区三区无码| 久久99久久无码毛片一区二区| 日韩精品无码久久久久久 | 97久久精品无码一区二区天美| 国产精品成人一区无码| 蜜桃无码一区二区三区| 精选观看中文字幕高清无码| 亚洲精品无码aⅴ中文字幕蜜桃| 久久无码人妻精品一区二区三区 | 国产乱人伦中文无无码视频试看| 国产精品99久久久精品无码 | 在线观看无码AV网址| 日韩精品无码人成视频手机| 四虎国产精品永久在线无码| 精品无码人妻夜人多侵犯18| 亚洲熟妇无码另类久久久| 国产精品毛片无码| 亚洲av无码国产精品色在线看不卡| 伊人久久大香线蕉无码| 蜜芽亚洲av无码精品色午夜| 日韩免费人妻AV无码专区蜜桃| 狠狠躁天天躁无码中文字幕| 日韩乱码人妻无码中文字幕视频| 国模无码一区二区三区| 麻豆AV无码精品一区二区| 日木av无码专区亚洲av毛片| 久久久无码中文字幕久...| 亚洲成A人片在线观看无码不卡| 国产午夜无码专区喷水| 中文字幕在线无码一区| 亚洲日韩乱码中文无码蜜桃臀网站| 久久久久无码精品| 亚洲精品无码av人在线观看| 亚欧免费无码aⅴ在线观看|