第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java有關(guān)裝飾器的重構(gòu)

java有關(guān)裝飾器的重構(gòu)

暮色呼如 2019-03-14 18:15:09
之前寫過一個服務(wù)器程序, 大概2000多行吧, 最近看到了發(fā)現(xiàn)寫的太爛了, 就想著重構(gòu)一下, 現(xiàn)在有4個接口與4個類, 分別是Request接口,Response接口,HttpRequest接口,HttpResponse接口以及相應(yīng)的實現(xiàn)類DefaultRequest和DefaultResponse, DefaultHttpRequest和DefaultResponse接口.類圖大概是這樣子的:我的DefaultHttpRequest/DefaultHttpResponse是通過裝飾器模式持有一個DefaultRequest/DefaultResponse來完成Request,ServletRequest/Response,ServletResponse接口的功能. 然后自己實現(xiàn)HttpRequest,HttpServletRequest/HttpResponse,HttpServletResponse接口的功能;Response接口中有一個getRequest()和setRequest()方法HttpResponse接口中有一個getHttpRequest()和setHttpRequest()方法.這幾個方法用于Request和Response進(jìn)行通訊使用.但是這就出現(xiàn)了一個問題:DefaultHttpResponse的getHttpRequest()和getRequest()如果想要返回的httpRquest所持有的request和request是同一個的話, 就需要外部環(huán)境來保證, 所以我寫的代碼是這樣的://request和response是由其他類解析http請求傳遞進(jìn)來的DefaultHttpRequest defaultRequest = new DefaultHttpRequest(request) ;DefaultHttpResponse defaultHttpResponse = new DefaultHttpResponse(response) ;defaultHttpResponse.setRequest(request) ;defaultHttpResponse.setHttpRequest(defaultRequest) ;但是我總覺著這樣寫, 似乎破壞了封裝性, 但是不知道該怎么改?
查看完整描述

1 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊

你的意思是 defaultHttpResponse.setRequest() 和 defaultHttpResponse.setHttpRequest() 的參數(shù)是有緊密聯(lián)系的,這種情況你可以只保留一個 set 接口,就是 setRequest,提供一個 get 接口,getDefaultRequest(),大概就像這樣


class DefaultHttpResponse {

    private HttpRequest request;

    private DefaultHttpRequest defaultRequest;


    public void setRequest(HttpRequest request) {

        this.request = request;

        defaultRequest = new DefaultHttpRequest(request);

    }


    public HttpDefaultReqeust getDefaultRequest() {

        return defaultRequest;

    }

}

也可以通過互斥來保證


class DefaultHttpResponse {

    private HttpRequest request;

    private DefaultHttpRequest defaultRequest;


    public void setRequest(HttpRequest request) {

        if (defaultRequest != null) {

            throw new RuntimeException();

        }

        this.request = request;

        defaultRequest = new DefaultHttpRequest(request);

    }


    public void setDefaultRequest(DefaultHttpRequest defaultRequest) {

        if (request != null) {

            throw new RuntimeException();

        }

        this.defaultReqeust = defaultRequst;

        request = defaultRequest.getRequest();

    }

}

或者一致性檢查


class DefaultHttpResponse {

    private HttpRequest request;

    private DefaultHttpRequest defaultRequest;


    public void setRequest(HttpRequest request) {

        if (defaultReqeust != null && defaultReqeust.getRequest() != request) {

            throw new RuntimeException();

        }

        this.request = request;

    }


    public void setDefaultRequest(DefaultHttpRequest defaultRequest) {

        if (request != null && defaultReqeust.getRequest() != request) {

            throw new RuntimeException();

        }

        this.defaultRequest = defaultRequest;

    }

}


查看完整回答
反對 回復(fù) 2019-04-24
  • 1 回答
  • 0 關(guān)注
  • 370 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號