設計模式 - 裝飾模式

1、概念算法

裝飾模式(Decorator Pattern):動態地給一個對象增長一些額外的職責,就增長對象功能來講,裝飾模式比生成子類實現更爲靈活。裝飾模式是一種對象結構型模式。ide

 

2、代碼實例測試

題目(該題目引用劉偉的博客,對此表示感謝!):網站

  Sunny軟件公司欲開發了一個數據加密模塊,能夠對字符串進行加密。最簡單的加密算法經過對字母進行移位來實現,同時還提供了稍複雜的逆向輸出加密,還提供了更爲高 級的求模加密。用戶先使用最簡單的加密算法對字符串進行加密,若是以爲還不夠能夠對加密以後的結果使用其餘加密算法進行二次加密,固然也能夠進行第三次加 密。試使用裝飾模式設計該多重加密系統。this

 

使用裝飾模式簡單代碼實現:加密

類圖:spa

2.1 抽象構件類.net

/**
 * 抽象構件類<br>
 * 加密字符串抽象類
 *
 */
public abstract class StrEncrypt {
    
    /**
     * 加密字符串
     * 
     * @param str 須要加密的字符串
     * @return String 加密後的字符串
     */
    public abstract String encryptStr(String str);

}

2.2 具體構件類設計

/**
 * 具體構件類<br>
 * 加密字符串實現類
 *
 */
public class StrEncryptOperate extends StrEncrypt {

    @Override
    public String encryptStr(String str) {
        String encrypt = "**" + str + "**";
        return encrypt;
    }

}

2.3 抽象裝飾類code

/**
 * 抽象裝飾類<br>
 * 加密字符串抽象裝飾類
 *
 */
public class StrEncryptDecorator extends StrEncrypt {
    
    private StrEncrypt strEncrypt;
    
    public StrEncryptDecorator(StrEncrypt strEncrypt){
        this.strEncrypt = strEncrypt;
    }

    @Override
    public String encryptStr(String str) {
        return strEncrypt.encryptStr(str);
    }

}

2.4 具體裝飾類 - 逆向加密字符串

/**
 * 具體裝飾類<br>
 * 逆向加密字符串實現類
 *
 */
public class ReverseEncryptDecorator extends StrEncryptDecorator {

    public ReverseEncryptDecorator(StrEncrypt strEncrypt) {
        super(strEncrypt);
    }
    
    @Override
    public String encryptStr(String str) {    
        return this.reverseStr(super.encryptStr(str));
    }
    
    /**
     * 逆向加密字符串
     * 
     * @param str 須要加密的字符串
     * @return String 加密後的字符串
     */
    public String reverseStr(String str){
        String encrypt = "$$" + str + "$$";
        return encrypt;
    }

}

2.5 具體裝飾類 - 高級加密字符串

/**
 * 具體裝飾類<br>
 * 高級加密字符串實現類
 *
 */
public class AdvanceEncryptDecorator extends StrEncryptDecorator {

    public AdvanceEncryptDecorator(StrEncrypt strEncrypt) {
        super(strEncrypt);
    }
    
    @Override
    public String encryptStr(String str) {    
        return this.advanceStr(super.encryptStr(str));
    }
    
    /**
     * 高級加密字符串
     * 
     * @param str 須要加密的字符串
     * @return String 加密後的字符串
     */
    public String advanceStr(String str){
        String encrypt = "&&" + str + "&&";
        return encrypt;
    }

}

2.6 測試

public class Test {
    
    public static void main(String[] args) {
        
        String str = "aa";
        
        //加密字符串
        StrEncrypt strEncrypt = new StrEncryptOperate();
        
        //逆向加密
        StrEncrypt reverse = new ReverseEncryptDecorator(strEncrypt);
        //高級加密
        StrEncrypt advance = new AdvanceEncryptDecorator(reverse);
        
        System.out.println(advance.encryptStr(str));
        
    }

}

執行結果:&&$$**aa**$$&&

 

3、注意

本文引用以下網站內容,在此表示感謝!

URL: http://blog.csdn.net/lovelion/article/details/7425873

相關文章
相關標籤/搜索