5 classic patterns in everyday code
DESCRIPTION
Patterns are an important tool to use as architects and developers. They provide a common vocabulary for us to design with, as well as a common approach to a common problem. Come learn about the five most useful patterns, and how to use them in your everyday code.TRANSCRIPT
![Page 1: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/1.jpg)
5 Classic PatternsPresented by:
Michael WoodIn Everyday Code
Strategic Data SystemsCenterville, OH
http://mvwood.com@mikewo on Twitter
ArcTrax
![Page 2: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/2.jpg)
What are Patterns?
![Page 3: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/3.jpg)
![Page 4: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/4.jpg)
![Page 5: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/5.jpg)
Now for something COMPLETELY different!
![Page 6: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/6.jpg)
Design Principles
![Page 7: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/7.jpg)
SOLID
ingle Responsibility Principle
pen / Close Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
![Page 8: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/8.jpg)
Now back to your regularly scheduled presentation.
![Page 9: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/9.jpg)
Types of Patterns
Creational
Structural
Behavioral
![Page 10: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/10.jpg)
Adapter Pattern
![Page 11: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/11.jpg)
Adapter PatternClient IHuman
HumanWookieAdapter
Wookie
.Growl()
.Speak()
.Speak()
Object Adapter
![Page 12: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/12.jpg)
Adapter Pattern
![Page 13: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/13.jpg)
Decorator Pattern
![Page 14: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/14.jpg)
Decorator PatternIceCreamIngredient
.Cost
VanillaIce
CreamBananasChocolate
Fudge
.Cost = $3.50
.50 ¢.50 ¢
public override decimal Cost(){ return _internalIngredient.Cost() + .50M;}
![Page 15: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/15.jpg)
Decorator PatternWait, isn’t this just wrapping
objects like the adapter pattern?
![Page 16: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/16.jpg)
Decorator PatternWhat are some downsides with this pattern?
![Page 17: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/17.jpg)
Factory Patterns
![Page 18: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/18.jpg)
Simple Factory PatternLaptop laptop;switch (brand){ case “dell”: laptop = new DellLaptop(); break; case “trashiba”: laptop = new ToshibaLaptop(); break;}
laptop.BlueScreen();LaptopFactory laptopFactory = new LaptopFactory();Laptop laptop = laptopFactory.BuildLaptop(brand);Laptop.BlueScreen();
Public class LaptopFactory { public Laptop BuildLaptop(string brand) { Laptop laptop; switch (brand) { case “dell”: return new DellLaptop(); case “trashiba”: return new ToshibaLaptop(); } } }
![Page 19: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/19.jpg)
Hold up! Didn’t you just move the problem to another class?
![Page 20: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/20.jpg)
Factory Method PatternShipyard .CreateShip()
UsNavyShipyard CorellianShipyard
![Page 21: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/21.jpg)
Okay, so what what’s the difference between the simple factory and an instance of one of the
derived factory classes? The both seem to do the
same thing.
![Page 22: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/22.jpg)
Abstract Factory Pattern
Universe
.CreateHero()
.CreateVillian()
.CreateCity()
DcUniverse MarvelUniverse
BatmanJokerGotham
WolverineMagnetoNew York
![Page 23: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/23.jpg)
Factory Patterns
![Page 24: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/24.jpg)
Command Pattern
![Page 25: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/25.jpg)
![Page 26: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/26.jpg)
![Page 27: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/27.jpg)
Should it matter?
![Page 28: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/28.jpg)
Command Pattern
RemoteOffCommand
Command
.Execute()
GarageDoorOpenCommand.Execute()
GarageDoor
.Open()
.Close()
![Page 29: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/29.jpg)
This reminds me of the adapter pattern. We wrapped an object and
pointed to a method.
![Page 30: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/30.jpg)
Command Pattern
![Page 31: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/31.jpg)
Design Patterns provide general, reusable solutions to a commonly occurring problem in software design
Remember
![Page 32: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/32.jpg)
![Page 33: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/33.jpg)
![Page 34: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/34.jpg)
Strategic Data SystemsCenterville, OH
Michael [email protected]
http://mvwood.com
@mikewo on Twitter
ArcTrax
![Page 35: 5 Classic Patterns In Everyday Code](https://reader033.vdocuments.us/reader033/viewer/2022061213/54981c87b47959da0f8b4569/html5/thumbnails/35.jpg)
ResourcesPresentation Materials
http://shrinkster.com/15z6
Pattern Resource – Do Factory http://dofactory.com
Patterns in Enterprise Software (Martin Fowler)http://shrinkster.com/15z8
Books:Design Patterns (Gang of Four book)Head First Design Patterns by Freeman & FreemanRefactoring to Patterns by Kerievsky
More Resources can be found in the presentation materials.