From 6c0a60f54341b789ba1b710698b829dbf39f27d3 Mon Sep 17 00:00:00 2001 From: Michael Schreiber Date: Sat, 13 Dec 2014 09:53:02 -0700 Subject: [PATCH 1/3] Added uml gif and changed the controller to use Object.defineProperty for the Total --- chaining/index.html | 96 +++++++++++++++++++------------------ chaining/js/controllers.js | 30 +++++++++--- chaining/umldiagram.gif | Bin 0 -> 13237 bytes 3 files changed, 73 insertions(+), 53 deletions(-) create mode 100644 chaining/umldiagram.gif diff --git a/chaining/index.html b/chaining/index.html index d5d208f..698a1a1 100644 --- a/chaining/index.html +++ b/chaining/index.html @@ -1,49 +1,53 @@ - - Project Template - - - - - - - - - - - - - - - - - - - - - -
-

{{vm.title}}

-

- The chaining pattern is an extremely useful way to perform continuous method calls on an object in JavaScript. -

- -

- This pattern is widely used in many different libraries and frameworks for JavaScript. -

- - -
-
-

Starting with a value of 5, Chained methods: add(2), multiply(5), subtract(7) -> Result should be 28

- -
- -

Result

-

{{vm.result}}

-
- + + Project Template + + + + + + + + + + + + + + + + + + + + + +
+

{{vm.title}}

+

+ The chaining pattern is an extremely useful way to perform continuous method calls on an object in JavaScript. +

+ +

+ This pattern is widely used in many different libraries and frameworks for JavaScript. +

+ + Chaining Uml +

+ The UML Diagram is above +

+ +
+
+

Starting with a value of 5, Chained methods: add(2), multiply(5), subtract(7) -> Result should be 28

+ +
+ +

Result

+

{{vm.result}}

+
+ \ No newline at end of file diff --git a/chaining/js/controllers.js b/chaining/js/controllers.js index ed7bd0d..fdb0fb2 100644 --- a/chaining/js/controllers.js +++ b/chaining/js/controllers.js @@ -2,16 +2,32 @@ 'use strict'; function Calculator(start){ - var total = start || 0; + if (this instanceof Calculator) { + var _total = start || 0; + this.add = function(x) { _total += x; return this;} + this.sub = function(x) { _total -= x; return this;} + this.mul = function(x) { _total *= x; return this;} + this.div = function(x) { _total /= x; return this;} + + Object.defineProperty(this, "Total", {get: function () { + return _total; + }, + set: function (newValue) { + _total = newValue; + + }, + enumerable: false, + configurable: true}); - this.add = function(x) { total += x; return this;} - this.sub = function(x) { total -= x; return this;} - this.mul = function(x) { total *= x; return this;} - this.div = function(x) { total /= x; return this;} + } + else { + return new Calculator(); + } - this.get = function() { return total; } } + + var controllerId = "mainCtrl"; angular.module('patterns.controllers').controller(controllerId, ['$scope', mainCtrl]); @@ -31,7 +47,7 @@ vm.process = function(){ var calculator = new Calculator(5).add(2).mul(5).sub(7); - vm.result = calculator.get(); + vm.result = calculator.Total; } } }()); \ No newline at end of file diff --git a/chaining/umldiagram.gif b/chaining/umldiagram.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2c69a2e3c9f1ca2102bda7ca3d031a3bf6bcfa4 GIT binary patch literal 13237 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 Date: Sun, 14 Dec 2014 07:42:21 -0700 Subject: [PATCH 2/3] Removed UML From Chaining Pattern. Updated Visitor Pattern --- chaining/index.html | 5 +-- chaining/js/controllers.js | 2 +- chaining/umldiagram.gif | Bin 13237 -> 0 bytes visitor/index.html | 5 ++- visitor/js/controllers.js | 72 +++++++++++++++++++++---------------- visitor/umldiagram.gif | Bin 0 -> 40582 bytes visitor/umldiagram.png | Bin 0 -> 8012 bytes 7 files changed, 48 insertions(+), 36 deletions(-) delete mode 100644 chaining/umldiagram.gif create mode 100644 visitor/umldiagram.gif create mode 100644 visitor/umldiagram.png diff --git a/chaining/index.html b/chaining/index.html index 698a1a1..975b028 100644 --- a/chaining/index.html +++ b/chaining/index.html @@ -33,10 +33,7 @@

{{vm.title}}

This pattern is widely used in many different libraries and frameworks for JavaScript.

- Chaining Uml -

- The UML Diagram is above -

+ diff --git a/chaining/js/controllers.js b/chaining/js/controllers.js index fdb0fb2..58a7720 100644 --- a/chaining/js/controllers.js +++ b/chaining/js/controllers.js @@ -21,7 +21,7 @@ } else { - return new Calculator(); + return new Calculator(start); } } diff --git a/chaining/umldiagram.gif b/chaining/umldiagram.gif deleted file mode 100644 index d2c69a2e3c9f1ca2102bda7ca3d031a3bf6bcfa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13237 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.title}}

With the modularity of the pattern, we're able to run N visitors against our data, giving us a lot of future extensibility for our system.

- + Chaining Uml +

+ The UML Diagram is above +

diff --git a/visitor/js/controllers.js b/visitor/js/controllers.js index 5950411..1992a85 100644 --- a/visitor/js/controllers.js +++ b/visitor/js/controllers.js @@ -2,51 +2,63 @@ 'use strict'; var Product = function(name, price, discount, sale_price){ - var self = this; + if (this instanceof Product) { + this.accept = function(visitor){ + visitor.visit(this); + }; - this.accept = function(visitor){ - visitor.visit(self); - }; + this.setDiscount = function(dis){ + discount = dis; + }; - this.getName = function(){ - return name; - }; - this.getPrice = function(){ - return price; - } - - this.setDiscount = function(dis){ - discount = dis; - }; + this.getDiscount = function(){ + return discount; + }; - this.getDiscount = function(){ - return discount; - }; + this.getDiscountPercentStr = function(){ + if(discount){ + return (discount * 100) + "%"; + } + } - this.getDiscountPercentStr = function(){ - if(discount){ - return (discount * 100) + "%"; + this.getDiscountAmount = function(){ + if(discount){ + return (price * this.getDiscount()).toFixed(2); + } } - } - this.getDiscountAmount = function(){ - if(discount){ - return (price * self.getDiscount()).toFixed(2); + this.getSalePrice = function(){ + if(discount){ + return (price * (1 - this.getDiscount())).toFixed(2); + } } - } + this.getName = function(){ + return name; + }; - this.getSalePrice = function(){ - if(discount){ - return (price * (1 - self.getDiscount())).toFixed(2); + this.getPrice = function(){ + return price; } + } + else { + return new Product(name,price,discount, sale_price); + } + + } var Discount = function(){ - this.visit = function(prod){ - prod.setDiscount(0.10); + if(this instanceof Discount) { + this.visit = function (prod) { + prod.setDiscount(0.10); + } + } + else { + return new Discount(); } + } var controllerId = "mainCtrl"; diff --git a/visitor/umldiagram.gif b/visitor/umldiagram.gif new file mode 100644 index 0000000000000000000000000000000000000000..00f369c1c7cd41eddef27f4f0c1e303915f90c0d GIT binary patch literal 40582 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

Qltwf@`yP6KgTwz0|LqV(cmUo;6tBr1X$lm7M zSdm6yCx<9$?E#PaJtWqIl=)-6>2T`fhxM&`b2r3rlaKwl35L7jIL9lJ+q$4URXX=Li$2U zP3kfcYdDWs*`c>$15;v-Tyg+|mCd(LC7ukv8Q&!ixEMVS+Vtjr#v&|M$o3RV*33zh zrllzA*~=^acd*cV&|K!yc&1W*N0g5U5LK6Ek-H8qJ(J?Bwvw(o>3>Q48o(OuNWSXS zzgBDpElpqT!0j0zVcAc`aHVZnCVH0=)mO^L7}Z6mEH0%!$iLJ;E@GxzmdcKv6m7g5 z-7;zLJ)CYg&4DiKzWR<$KVRq9y`{bUh)H3QZnJQMOE2);+)_l}J7_*L!(dYBEsZ|v z60-q3YYRg20d+;P3+2$3Yu`xeXQ@84|7XVLRw`ns#M~kjw~h%)6XMuj)3gXYG`~}# znWS%&Qu~jdV&Hyct*MnA+>Sx&aVWB_RGMlc1{EL5Rk_nMV%u>8(7O(&|1oTc=yNdr3%e8;<}-lf~b1g9l48IcQsr z6@$DL9GVal=Sf#RQ7?z*F!x*HPOCE2z1s3is&HMHy565(JaE4>5E9ce`ZQxFW_A0{ z5y6Zykjbm`!k{(Kv!p59v)M!9R4Kp1m8^CmK&aEfQ9n|qE}bATL-*u0a+N=bv??pZ zVXX{az&LriKR)Dqls|@I=z7lE_}Jb9D7DVvoEy71 z5zmA46fV(UKW*qCv-}jpMIqudUMPuI~uHgixiL%tatr`3P*Ds{Ylm@n4j&noBYsn~q0L^2zux$<7ZzsR52KK#9z zLRVEO_hqg)I+u6MZTbcrg&huyNIr;yCI0k0Zo|tP!b0*d78`qh?a_Ov$QqOkGg|%0 z{*aV66?2-J_;jBgQs&C#_w6m8^$m-iNma7wP6DG0sShcK=WPvmLsNd$h&MY(BDD%d znr9Z8;Kj5MZ7llKCGmB^jddQ2Ylnxg?D=ch9FIIkOS88CvV}Ma*=ONGNOMOyiV|?I zF}lCAZyX;&gw-P{5@m?hDg$KP+{x)X=~F#zmSFx7s@JUbq0RrgmoQc0sIjJ$sr$Ws zky>`nhNAeLNEDiRGa4&ya#G*>rv56xV5j%jx1G)fGW?VI2FB_b`cF*!`$gM2KbRK= zPkn#9FZ}9i);7i5*rU*P*TjDi{SOH7JR-dQM6xMIO=>$ujQTSVi9wTzNYXl2|Ca-) zHFdFpkbXk(hK}#q#Jm{J#SnedB!Ab m4WKPu39})-spMJAxNbxcvV1#%xhKwOs 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 QcD%`SGz~Rs)NVicA1B9Y=Kufz literal 0 HcmV?d00001 From cdc7f1a757f5a39e35aee07aecc61a09a5d550af Mon Sep 17 00:00:00 2001 From: Michael Schreiber Date: Sun, 14 Dec 2014 07:46:38 -0700 Subject: [PATCH 3/3] Updated Gif's Removed png --- visitor/index.html | 2 +- visitor/umldiagram.png | Bin 8012 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 visitor/umldiagram.png diff --git a/visitor/index.html b/visitor/index.html index 8fafa5e..a9d2daf 100644 --- a/visitor/index.html +++ b/visitor/index.html @@ -36,7 +36,7 @@

{{vm.title}}

With the modularity of the pattern, we're able to run N visitors against our data, giving us a lot of future extensibility for our system.

- Chaining Uml + Visitor Uml

The UML Diagram is above

diff --git a/visitor/umldiagram.png b/visitor/umldiagram.png deleted file mode 100644 index 60113c21c893612a65879050ecacdc5d50fdaa08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8012 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 QcD%`SGz~Rs)NVicA1B9Y=Kufz