小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

GoF設(shè)計模式之九 Decorator- -

 wtf_soft 2005-07-22

 

                                      

    B4) Decorator(修飾者模式)
    定義:動態(tài)的在一個對象上附加一些額外的職責(zé)。修飾者為擴充功能提供一個靈活的對子類的選擇。
    修飾者就是一個中間商,從供應(yīng)商那里拿到貨,然后重新包裝修飾一下,提供給客戶。這個模式也非常有用,我覺得用它來完成復(fù)雜的數(shù)據(jù)變化或檢查非常合適,比如filter或validator。用個validator的實例來說明一下吧。首先,我們需要一個validator來檢查日期數(shù)據(jù)的有效性。
    public interface DateValidator {
        public boolean isValid();
    }

    對于日期的檢驗為(只檢查長度)
    public NormalDate implements DateValidator {
        private String date;
        public NormalDate(String date) {
            this.date = date;
        }
        public boolean isValid() {
            if (data == null || data.length() != 8) {
                return false;
            }
            return true;
        }
        public String getDate() {
            return date;
        }
    }

    對于生日日期的檢驗為(不能是未來出生)
    public Birthday implements Validator {
        private DateValidator validator;
        public Birthday(DateValidator validator) {
            this.validator = validator;
        }
        public boolean isValid() {
            if (validator.isValid()) {
                if (validator.getDate().compareTo(now) > 0) {  //now is "20050201"
                    return false;
                }
                return true;
            }
            return false;
        }
    }
    那檢驗生日的過程如下
    DateValidator normalDate = new NormalDate("20050714");
    DateValidator birthday = new Birthday(normalDate);
    return birthday.isValid(); //false will be returned
    到這里,一個修飾模式就完成。那如果要擴展日期檢驗,假設(shè)日期年是用2位而不是4位表示,而且要進行其他檢查(如全部為半角數(shù)字,日期合法等),那對于日期的檢驗就變成
    public SpecialDate implements DateValidator {
        private String date;
        public SpecialDate(String date) {
            this.date = date;
        }
        public boolean isValid() {
            if (data == null || data.length() != 6) {
                return false;
            }
            // other dateCheck
            return true;
        }
        public String getDate() {
            return toNormal(date);  // "020524" -> "20020524"
        }
    }
    那檢驗生日的過程如下
    DateValidator specialDate = new SpecialDate("020524");
    DateValidator birthday = new Birthday(specialDate);
    return birthday.isValid(); //true will be returned


   參考:
1、 http://www./designpatterns/decorator.htm(中文、java實例)
2、 http://www./Patterns/PatternDecorator.aspx(英文、C#實例、UML)
3、 http://www./tech/DesignPattern/Decorator.html(日文、java實例、UML)推薦

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多