design-pattern
Version:
Javascript design patterns for both browser and Node.js
108 lines (91 loc) • 3.44 kB
JavaScript
(function(exports){
exports.moduleA = function(){
return new ModuleA();
};
exports.moduleB = function(){
return new ModuleB();
};
var ModuleA = function() {
var name = 'ModuleA',
_private = {
pre: function(context) {
console.log(name + ' pre',context);
},
op1: function(context) {
console.log(name + ' op1',context);
},
op2: function(context) {
console.log(name + ' op2',context);
},
op3: function(context) {
console.log(name + ' op3',context);
},
op4: function(context){
console.log(name + ' op4',context);
},
op5: function(context){
console.log(name + ' op5',context);
},
post: function(context) {
console.log(name + ' post',context);
},
};
return {
facade: function(context) {
_private.pre(context);
if (context.param1) _private.op1({data: context.param1});
if (context.param2) _private.op2({data: context.param2});
if (context.param3) _private.op3({data: context.param3});
if (context.param4) _private.op4({data: context.param4});
if (context.param4 > context.param3) {
var total = context.param1 + context.param2 +
context.param3 + context.param4;
_private.op5({data: total});
};
_private.post(context);
}
};
};
var ModuleB = function() {
var name = 'ModuleB',
_private = {
pre: function(context) {
console.log(name + ' pre',context);
},
op1: function(context) {
console.log(name + ' op1',context);
},
op2: function(context) {
console.log(name + ' op2',context);
},
op3: function(context) {
console.log(name + ' op3',context);
},
op4: function(context) {
console.log(name + ' op4',context);
},
post: function(context) {
console.log(name + ' post',context);
},
};
return {
facade: function(context) {
_private.pre(context);
if (context.param1){
_private.op1({data: context.param1});
};
if (context.param2){
_private.op2({data: context.param2});
};
if (context.param3){
_private.op3({data: context.param3});
};
if (context.param1 && context.param2 && context.param3){
var data = context.param1 + context.param2 + context.param3;
_private.op4({data: data});
};
_private.post(context);
}
};
};
}(typeof exports === 'undefined' ? this.facadePattern = {} : exports));