디자인 모델 시리즈 의 2 전략 모델
다음 과 같은 수요 가 있 습 니 다. 내일 월요일 에 회사 에 출근 해 야 합 니 다. 현재 집에 서 회사 까지 두 가지 전략 이 있 습 니 다. 하 나 는 버스 이 고 하 나 는 지하철 입 니 다.이 루어 보도 록 하 겠 습 니 다.
구체 적 인 정책 정의
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 관찰자 모델
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.