디자인 모델 시리즈 의 2 전략 모델

7150 단어
자바 구현
다음 과 같은 수요 가 있 습 니 다. 내일 월요일 에 회사 에 출근 해 야 합 니 다. 현재 집에 서 회사 까지 두 가지 전략 이 있 습 니 다. 하 나 는 버스 이 고 하 나 는 지하철 입 니 다.이 루어 보도 록 하 겠 습 니 다.
구체 적 인 정책 정의
public interface IStrategy {
   //      
   public void description();
}
public class Bus implements IStrategy{
   @Override
   public void description() {
       // TODO Auto-generated method stub
       System.out.println("      ");
   }
}

public class Subway implements IStrategy {
   @Override
   public void description() {
       // TODO Auto-generated method stub
       System.out.println("      ");
   }
}

가장 간단 한 전략 호출
public class GoToWork {
    public void myStrategy(String strategy){
        if("bus".equals(strategy)){
            new Bus().description();
        }else if("subway".endsWith(strategy)){
            new Subway().description();
        }
    }
}
public class Test {
    public static void main(String[] args) {
        GoToWork gotowork = new GoToWork();
        gotowork.myStrategy("bus");
        gotowork.myStrategy("subway");
    }
}

위의 코드 에서 알 수 있 듯 이 if else 의 사용 을 통 해 간단 한 전략 모델 을 실현 했다.하지만 어느 날 내 가 차 를 샀 다 면 스스로 차 를 몰 고 출근 할 수 있 었 을 것 이다.이 럴 때 는 GoToWork 류 를 수정 하고 하나의 else if 판단 을 더 해 수 요 를 실현 해 야 한다.이렇게 해서 코드 의 긴밀 한 결합 을 초래 하 였 다.그렇다면 결합 을 풀 수 있 는 방법 이 없 을 까? 운전 은 물론 비행 기 를 몰 고 출근 하 는 것 도 수정 하지 않 아 도 되 는 것 일 까?
개조 하 다.
public class GoToWork {
    //       
    private IStrategy strategy;
    //       
    public void setStrategy(IStrategy strategy){
        this.strategy = strategy;
    }
    public void myStrategy(){
        //             
        this.strategy.description();
    }
}
public class Test {
    public static void main(String[] args) {
        GoToWork work = new GoToWork();
        //     
        work.setStrategy(new Bus());
        work.myStrategy();
        //     
        work.setStrategy(new Subway());
        work.myStrategy();
        //    
        //work.setStrategy(new Car());
        //work.myStrategy();
        /*.....        .....*/
    }
}

이 를 통 해 알 수 있 듯 이 GoToWork 류 를 개조 한 후에 우리 의 수 요 를 만족 시 켰 다.
JavaScript 구현
이전에 표 구성 요 소 를 작성 할 때, 표 줄 을 편집 할 수 있 는 요구 사항 이 있 습 니 다.개발 자 는 표 구성 요 소 를 사용 할 때 텍스트 상자, 드 롭 다운 상자, 체크 단추 등 셀 의 편집 형식 을 선택 할 수 있 습 니 다.또한 유연성 을 위해 서 는 표 의 셀 에서 날짜 선택, 팝 업 상자 선택 등 개발 자 들 이 유형 을 사용자 정의 할 수 있 도록 해 야 한다.이 수요 에 맞추어 전략 모델 이 도움 이 되 었 다.
이루어지다
(function(W){
    var singleton  = null;
    function Grid(){
        this.config = {
            pagination:true
        };
        init(this);
    }
    //     
    var init = function (G) {
        var $table = $("");
        G.$Container = $("#"+this.placeAt).empty().append($table);
    };
    //      
    Grid.prototype.setConfig = function (config) {
        this.config = $.extend(this.config,config);
    };
    //   
    Grid.prototype.addRow = function () {
        var $tr = $("");
        var len = this.config.layout.length;
        for(var i=0;i");
            new Cell($td,this.config.layout[i]);
            $tr.append($td);
        }
        this.$Container.append($tr);
    };
    //   
    Grid.prototype.deleteRow = function () {

    };
    //      
    W.Grid.getInstance = function () {
        if(singleton===null){
            singleton = new Grid();
        }
        return singleton;
    };

    //     
    function  Cell($container,config) {
        this.$Container = $container;
        this.config     = config;
        this.init();
    }
    Cell.fn = Cell.prototype;

    Cell.fn.init = function(){
        if(this.config.editor){
            this._editor = this.edit();
        }else{
            this._editor = this.read();
        }
    };
    //     
    Cell.fn.read = function(){
        //           
        return new Forms["Span"](this.$Container,"");
    };
    //               
    Cell.fn.edit = function(){
        var formObj = null;
        var type    = this.config.editor.type;
        if(typeof(type)=="function"){
            //          
            formObj = new type(this.$Container,"");
        }else if(typeof(type)=="string"){
            //       
            type    =  type.substring(0,1).toUpperCase() + type.substring(1,type.length);
            //        
            formObj = new Forms[type](this.$Container,"");
        }
        return formObj;
    };


    /*******************************    *****************************/
    var Forms = {};

    /**
     *      
     * @param $container
     * @param value
     * @constructor
     */
    Forms.Span = function($container,value){
        this.parent = $container;
        this._value = value;
        this.$Dom   = '';
        this._init();
    };
    Forms.Span.prototype._init = function(){
        this.$Dom   = $('').append(this._value);
        this.parent.append(this.$Dom);
    };
    Forms.Span.prototype.setValue = function(value){
        this.$Dom.html(value);
    };
    Forms.Span.prototype.getValue = function(){
        return this._value;
    };

    /**
     *    
     * @param $container
     * @param value
     * @constructor
     */
    Forms.Text = function($container,value){
        this.parent     = $container;
        this._value     = value;
        this.$Dom       = null;
        this._init();
    };
    Forms.Text.prototype._init = function(){
        this.$Dom   = $('');
        this.parent.append(this.$Dom);
        this.setValue(this._value);
    };
    Forms.Text.prototype.setValue = function(value){
        this.$Dom.val(value);
    };
    Forms.Text.prototype.getValue = function(){
        return this.$Dom.val();
    };
    /*            set get    */

})(window);
//                  
var grid = Grid.getInstance();
grid.setConfig({
    placeAt:"GridContainer",
    layout:[
        {name:"  ",field:"Name",sort:true,locked:true,editor:{type:"Text"}},
        {name:"  ",field:"Sex",sort:true,editor:{type:"radio",options:[{name:" ",value:"1"},{name:" ",value:"0"}]}},
        {name:"  ",field:"Phone",editor:{type:"Text"}},
        {name:"  ",field:"Email"},
        {name:"  ",field:"Address",format:function(obj){}}
    ]
});
grid.addRow();
전편: 디자인 모델 시리즈 중 하나 인 단일 모델 다음 편: 디자인 모델 시리즈 의 3 관찰자 모델

좋은 웹페이지 즐겨찾기