亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JAVA設(shè)計(jì)模式-策略模式

Yi_Zhi_Yu / 738人閱讀

摘要:抽象策略角色這是一個(gè)抽象角色,通常由一個(gè)接口或抽象類實(shí)現(xiàn)。,不知道會(huì)不會(huì)有人這么做,一般都是加鹽加醋用戶類加密接口加密接口兩個(gè)實(shí)現(xiàn)類使用偽加密偽加密輸出偽加密偽加密參考來源設(shè)計(jì)模式策略模式上文概念內(nèi)容大部分來源于這文章設(shè)計(jì)模式

概念

策略模式:定義了算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化獨(dú)立于使用算法的客戶

該模式涉及三個(gè)角色:

  ● 環(huán)境(Context)角色:持有一個(gè)Strategy的引用。

  ● 抽象策略(Strategy)角色:這是一個(gè)抽象角色,通常由一個(gè)接口或抽象類實(shí)現(xiàn)。此角色給出所有的具體策略類所需的接口。

  ● 具體策略(ConcreteStrategy)角色:包裝了相關(guān)的算法或行為。

策略模式的使用場景:

1)針對同一種問題的多種處理方式、僅僅是因?yàn)榫唧w行為有差別時(shí),

2)需要安全的封裝多種同一類型的操作時(shí)

3)出現(xiàn)同一抽象類有多個(gè)子類,而又需要使用if-else或者switch-case來選擇具體子類時(shí)

舉個(gè)栗子

把生活中的鴨子看作環(huán)境角色,它們的行動(dòng)看作抽象策略角色,每種動(dòng)作的實(shí)現(xiàn)看作具體策略角色。比如,鴨子飛行和叫聲的行為,有的可以用翅膀飛行,有不能飛行;有的是呱呱叫,有的是吱吱叫。他們之間的關(guān)系圖是:

鴨子自身不實(shí)現(xiàn)飛行和叫聲的行為(算法),把這兩個(gè)行為(算法)托付給了兩個(gè)接口。每當(dāng)需要?jiǎng)?chuàng)建出鴨子來的時(shí)候,可以決定鴨子這個(gè)鴨子的飛行方式和叫聲。如果鴨子進(jìn)化成可以說人話,只需要實(shí)現(xiàn)QuackBehavior接口即可,而不用修改鴨子的內(nèi)部。

再一個(gè)栗子

在編程中,用戶的密碼保存到數(shù)據(jù)庫前往往需要對密碼加密,可以使用這個(gè)模式定義不同的加密算法,隨機(jī)使用不同的算法加密。[emmm,不知道會(huì)不會(huì)有人這么做,一般都是加鹽加醋]

用戶類

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);
}

兩個(gè)實(shí)現(xiàn)類

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設(shè)計(jì)模式--策略模式上文概念內(nèi)容大部分來源于這文章

Head First 設(shè)計(jì)模式

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/76847.html

相關(guān)文章

  • Java設(shè)計(jì)模式-策略模式

    摘要:可以使用其他模式來修正這個(gè)缺陷,如工廠方法模式代理模式或享元模式。我們的策略模式只是實(shí)現(xiàn)了策略的管理,但是沒有嚴(yán)格地定義適當(dāng)?shù)膱鼍笆褂眠m當(dāng)?shù)牟呗?,在?shí)際項(xiàng)目中,一般通過工廠方法模式來實(shí)現(xiàn)策略類的聲明。源碼地址參考文獻(xiàn)設(shè)計(jì)模式之禪 定義 Define a family of algorithms,encapsulate each one,and make them interchange...

    dabai 評論0 收藏0
  • 設(shè)計(jì)模式-策略模式

    摘要:今天我們來學(xué)習(xí)一種行為型模式,策略模式。策略模式讓算法獨(dú)立于使用它的客戶而變化,也稱為政策模式。策略模式提供了可以替換繼承關(guān)系的辦法。使用策略模式可以避免使用多重條件轉(zhuǎn)移語句。策略模式將造成產(chǎn)生很多策略類。今天我們來學(xué)習(xí)一種行為型模式,策略模式(Strategy Pattern)。模式定義定義一系列算法,將每一個(gè)算法封裝起來,并讓它們可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而變化,也稱...

    番茄西紅柿 評論0 收藏0
  • 我的Java設(shè)計(jì)模式-策略模式

    摘要:孫臏心里一萬個(gè)草泥馬在奔騰,差點(diǎn)沒噎死自己滾一邊去,我們這盤跟他賽馬開始,策略模式上場。在設(shè)計(jì)模式之禪中的提出通過策略枚舉和反射機(jī)制對策略模式進(jìn)行改良,膜拜了但是要添加或淘汰策略,還是得去對枚舉進(jìn)行修改,也不符合開閉原則。 今天給大家說說田忌賽馬的故事。如有雷同,純屬巧合!話說在戰(zhàn)國時(shí)期,群雄割據(jù),硝煙四起,茶余飯后還是少不了娛樂活動(dòng)的,其中賽馬是最火爆的。一天,孫臏看到田忌像個(gè)死雞似...

    zilu 評論0 收藏0
  • Java 設(shè)計(jì)模式綜合運(yùn)用(門面+模版方法+責(zé)任鏈+策略+工廠方法)

    摘要:注解方式優(yōu)點(diǎn)使用注解方式可以極大的減少使用模版方法模式帶來的擴(kuò)展時(shí)需要繼承模版類的弊端,工廠注解的方式可以無需關(guān)心其他業(yè)務(wù)類的實(shí)現(xiàn),而且減少了類膨脹的風(fēng)險(xiǎn)。 在上一篇文章Java設(shè)計(jì)模式綜合運(yùn)用(門面+模版方法+責(zé)任鏈+策略)中,筆者寫了一篇門面模式、模版方法、責(zé)任鏈跟策略模式的綜合運(yùn)用的事例文章,但是后來筆者發(fā)現(xiàn),在實(shí)現(xiàn)策略模式的實(shí)現(xiàn)上,發(fā)現(xiàn)了一個(gè)弊端:那就是如果在后續(xù)業(yè)務(wù)發(fā)展中,需...

    Yuanf 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<