摘要:抽象策略角色這是一個抽象角色,通常由一個接口或抽象類實現。,不知道會不會有人這么做,一般都是加鹽加醋用戶類加密接口加密接口兩個實現類使用偽加密偽加密輸出偽加密偽加密參考來源設計模式策略模式上文概念內容大部分來源于這文章設計模式
概念
策略模式:定義了算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化獨立于使用算法的客戶
該模式涉及三個角色:
● 環境(Context)角色:持有一個Strategy的引用。
● 抽象策略(Strategy)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體策略類所需的接口。
● 具體策略(ConcreteStrategy)角色:包裝了相關的算法或行為。
策略模式的使用場景:
1)針對同一種問題的多種處理方式、僅僅是因為具體行為有差別時,
2)需要安全的封裝多種同一類型的操作時
3)出現同一抽象類有多個子類,而又需要使用if-else或者switch-case來選擇具體子類時
舉個栗子把生活中的鴨子看作環境角色,它們的行動看作抽象策略角色,每種動作的實現看作具體策略角色。比如,鴨子飛行和叫聲的行為,有的可以用翅膀飛行,有不能飛行;有的是呱呱叫,有的是吱吱叫。他們之間的關系圖是:
鴨子自身不實現飛行和叫聲的行為(算法),把這兩個行為(算法)托付給了兩個接口。每當需要創建出鴨子來的時候,可以決定鴨子這個鴨子的飛行方式和叫聲。如果鴨子進化成可以說人話,只需要實現QuackBehavior接口即可,而不用修改鴨子的內部。
再一個栗子在編程中,用戶的密碼保存到數據庫前往往需要對密碼加密,可以使用這個模式定義不同的加密算法,隨機使用不同的算法加密。[emmm,不知道會不會有人這么做,一般都是加鹽加醋]
用戶類
public class User { /** * 加密接口 */ private Encryption encryption; private String password; public void setEncryption(Encryption encryption) { this.encryption = encryption; } public void setPassword(String password) { this.password = password; } public String getPassword() { return encryption.encrypt(password); } }
加密接口
public interface Encryption { String encrypt(String s); }
兩個實現類
public class Md5Encrypt implements Encryption{ @Override public String encrypt(String s) { return s + "md5"; } }
public class SHAEncrypt implements Encryption{ @Override public String encrypt(String s) { return s + "sha"; } }
使用:
public class Main { public static void main(String[] args) { User user = new User(); user.setEncryption(new Md5Encrypt()); user.setPassword("1234"); System.out.println("偽MD5加密:" + user.getPassword()); user.setEncryption(new SHAEncrypt()); System.out.println("偽SHA加密:" + user.getPassword()); } }
輸出:
偽MD5加密:1234md5 偽SHA加密:1234sha參考來源
java設計模式--策略模式上文概念內容大部分來源于這文章
Head First 設計模式
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76847.html
摘要:可以使用其他模式來修正這個缺陷,如工廠方法模式代理模式或享元模式。我們的策略模式只是實現了策略的管理,但是沒有嚴格地定義適當的場景使用適當的策略,在實際項目中,一般通過工廠方法模式來實現策略類的聲明。源碼地址參考文獻設計模式之禪 定義 Define a family of algorithms,encapsulate each one,and make them interchange...
摘要:孫臏心里一萬個草泥馬在奔騰,差點沒噎死自己滾一邊去,我們這盤跟他賽馬開始,策略模式上場。在設計模式之禪中的提出通過策略枚舉和反射機制對策略模式進行改良,膜拜了但是要添加或淘汰策略,還是得去對枚舉進行修改,也不符合開閉原則。 今天給大家說說田忌賽馬的故事。如有雷同,純屬巧合!話說在戰國時期,群雄割據,硝煙四起,茶余飯后還是少不了娛樂活動的,其中賽馬是最火爆的。一天,孫臏看到田忌像個死雞似...
摘要:注解方式優點使用注解方式可以極大的減少使用模版方法模式帶來的擴展時需要繼承模版類的弊端,工廠注解的方式可以無需關心其他業務類的實現,而且減少了類膨脹的風險。 在上一篇文章Java設計模式綜合運用(門面+模版方法+責任鏈+策略)中,筆者寫了一篇門面模式、模版方法、責任鏈跟策略模式的綜合運用的事例文章,但是后來筆者發現,在實現策略模式的實現上,發現了一個弊端:那就是如果在后續業務發展中,需...
閱讀 3233·2021-11-22 12:07
閱讀 1876·2021-10-12 10:11
閱讀 1041·2019-08-30 15:44
閱讀 2935·2019-08-30 12:45
閱讀 2184·2019-08-29 16:41
閱讀 1636·2019-08-29 16:35
閱讀 2620·2019-08-29 12:57
閱讀 1147·2019-08-26 13:51