03.09.2015 Views

Design Patterns

Download - Assembla

Download - Assembla

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CHAPTER 14 ■ THE PROXY PATTERN 203<br />

First, define the interface for the web service. This allows you to swap out different types<br />

of proxies later on, if need be:<br />

/* PageStats interface. */<br />

var PageStats = new Interface('PageStats', ['getPageviews', 'getUniques',<br />

'getBrowserShare', 'getTopSearchTerms', 'getMostVisitedPages']);<br />

Then define the remote proxy itself, StatsProxy:<br />

/* StatsProxy singleton. */<br />

var StatsProxy = function() { // implements PageStats<br />

/* Private attributes. */<br />

var xhrHandler = XhrManager.createXhrHandler();<br />

var urls = {<br />

pageviews: '/stats/getPageviews/',<br />

uniques: '/stats/getUniques/',<br />

browserShare: '/stats/getBrowserShare/',<br />

topSearchTerms: '/stats/getTopSearchTerms/',<br />

mostVisitedPages: '/stats/getMostVisitedPages/'<br />

};<br />

/* Private methods. */<br />

function xhrFailure() {<br />

throw new Error('StatsProxy: Asynchronous request for stats failed.');<br />

}<br />

function fetchData(url, dataCallback, startDate, endDate, page) {<br />

var callback = {<br />

success: function(responseText) {<br />

var stats = eval('(' + responseText + ')');<br />

dataCallback(stats);<br />

},<br />

failure: xhrFailure<br />

};<br />

var getVars = [];<br />

if(startDate != undefined) {<br />

getVars.push('startDate=' + encodeURI(startDate));<br />

}<br />

if(endDate != undefined) {<br />

getVars.push('endDate=' + encodeURI(endDate));<br />

}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!