2013-08-24 2 views
-1

Как говорится в этом теге, это пример шаблона стратегии в Javascript?Пример, этот шаблон стратегии?

(я думаю, что вопрос является более подходящим для них, но Просмотра Коды переадресовать меня на StackOverflow)

var canvas = { 
    context: document.getElementById("canvas").getContext("2d") 
}; 
/////////////////////////////////////////////////// 
function Square(_strategy) { 
    this.x = 50; 
    this.y = 50; 
    this.width = 100; 
    this.height = 100; 

    this.strategy = _strategy; 
} 

Square.prototype.draw = function() { 
    this.strategy(this); 
}; 
/////////////////////////////////////////////////// 
function Circle(strategy) { 
    Square.call(this, strategy); 

    this.radius = 25; 
} 

Circle.prototype = new Square(); 
/////////////////////////////////////////////////// 
function drawSquare(shape) { 
    canvas.context.strokeRect(shape.x, shape.y, shape.width, shape.height); 
} 
/////////////////////////////////////////////////// 
function drawCircle(shape) { 
    canvas.context.beginPath(); 
    canvas.context.arc(shape.x , shape.y, shape.radius, 0, 360, false); 
    canvas.context.stroke(); 
} 
/////////////////////////////////////////////////// 
var shapes = []; 
shapes.push(new Square(drawSquare)); 
shapes.push(new Circle(drawCircle)); 

for(var i=0; i<shapes.length; i++) { 
    shapes[i].draw(); 
} 

Live example

Я знаю, что я не нужен шириной и высоту для рисования круга. (Я буду нуждаться в них позже для выбора этого круга, поэтому это не ошибка :))

+0

Если вы голосуете, пожалуйста, оставьте хотя бы объяснение, почему ... – Srle

+1

Я не проголосовал, но этот вопрос не показывает никаких усилий и не демонстрирует никакого понимания предмета. Вы в основном разместили стену кода и сказали: «_true или false, это использует шаблон X_». – jahroy

+0

Я думаю, что это не «стена» кода, пример просто достаточно, чтобы его пересмотреть в течение нескольких минут. Во всяком случае, спасибо на предложение. – Srle

ответ

3

Да, но такой шаблон может быть реализован так тривиально в Javascript, что это, вероятно, даже не шаблон.

В принципе, даже если у вас было это так:

function Square() { 
    this.x = 50; 
    this.y = 50; 
    this.width = 100; 
    this.height = 100; 
} 

Square.prototype.draw = function(canvas) { 
    canvas.context.strokeRect(this.x, this.y, this.width, this.height); 
}; 

Вы можете просто сделать:

var a = new Square(); 
a.draw = function(canvas) { 
    canvas.context.strokeRect(this.x + 5, this.y, this.width, this.height); 
}; 

Btw, не делают ваши классы относятся к глобальным переменным. Возьмите его как свойство или параметр.

Смежные вопросы