describe ways to assemble objects to implement a new functionality telerik software academy ...
Post on 17-Jan-2016
218 views
TRANSCRIPT
![Page 1: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/1.jpg)
Structural PatternsDescribe ways to assemble objects to
implement a new functionality
Telerik Software Academyhttp://academy.telerik.com
High-Quality Code
![Page 2: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/2.jpg)
Structural Patterns Describe ways to assemble objects to implement a new functionality
Ease the design by identifying a simple way to realize relationships between entities
These design patterns are all about class and object composition Structural class-creation patterns
use inheritance to compose interfaces
Structural object-patterns define ways to compose objects to obtain new functionality
2
![Page 3: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/3.jpg)
List of Structural Patterns
Façade Composite Flyweight Proxy Decorator Adapter Bridge
3
![Page 4: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/4.jpg)
Façade
![Page 5: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/5.jpg)
Facade Pattern An object that provides a simplified interface to a larger body of code, such as class library Make a software library easier to
use, understand and more readable Reduce dependencies of outside
code Keeps the Principle of least
knowledge
Wrap a poorlydesigned APIsin a better one 5
![Page 6: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/6.jpg)
Facade Pattern Examples
Façade pattern used in many Win32 API based classes to hide Win32 complexity
In XmlSerializer (in .NET) and JSON serializer (in JSON.NET) hides a complex task (that includes generatingassemblies on thefly!) behind a veryeasy-to-use class.
WebClient, File areanother examples
6
![Page 7: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/7.jpg)
Façade – Code ExampleThe hard way:popper.On();popper.Pop();amp.On();amp.SetSurroundSound();amp.SetVolume(10);amp.SetDvd(dvd);screen.Down();lights.Dimm(20);projector.On();projector.WideScreenMode();dvd.On();dvd.Play("Dzift");
The facade way:
homeTheater.WatchMovie("Dzift");
7
![Page 8: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/8.jpg)
Façade – Demo
8
![Page 9: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/9.jpg)
Composite
![Page 10: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/10.jpg)
Composite Pattern Composite Pattern allows to combine different types of objects in tree structures
Gives the possibility to treat the same individual objects or groups of objects
10
![Page 11: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/11.jpg)
Composite Pattern (2) Used when
We have different objects and we want to treat them the same way
We want to present hierarchy of objects Tree-like structures
Examples in .NET Framework Windows.Forms.Control and its
derived classes
System.Web.UI.Control and its derived classes
System.Xml.XmlNode and its derived classes
11
![Page 12: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/12.jpg)
Composite Pattern – Example
abstract class MailReceiver { public abstract void SendMail();}class EmailAddress : MailReceiver { public override void SendMail() { /*...*/ }}class GroupOfEmailAddresses : MailReceiver { private List<MailReceiver> participants; public override void SendMail() { foreach(var p in participants) p.SendMail(); }}
12
static void Main() { var rootGroup = new GroupOfEmailAddresses(); rootGroup.SendMail();}
![Page 13: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/13.jpg)
Composite Pattern – Demo
13
![Page 14: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/14.jpg)
Flyweight
![Page 15: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/15.jpg)
Flyweight Pattern Use sharing to support large numbers of fine-grained objects efficiently Reduce storage costs for large
number of objects Share objects to be used in multiple
contexts simultaneously Retain object oriented granularity
and flexibility Minimizes memory use bysharing as much data aspossible with other similar objects
String.Intern returns Flyweight
15
![Page 16: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/16.jpg)
Flyweight Pattern Each "flyweight" object is divided into 2 pieces: state-dependent (extrinsic, as
parameter)
state-independent (intrinsic, shared by factory)
16
![Page 17: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/17.jpg)
Flyweight – Demo
17
![Page 18: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/18.jpg)
Proxy
![Page 19: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/19.jpg)
The Proxy Pattern An object representing another
object Provide a surrogate or placeholder
for another object to control access to it
Use an extra level of indirection to supportdistributed, controlled or intelligent access
Add a wrapper and delegation to protect the real component from undue complexity
19
Can be implemented using inheritance
![Page 20: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/20.jpg)
Proxy – Applicability Remote proxy
Local representative of remote object
Example: WPF (decouple networking details), COM Callable Wrappers
Virtual proxy Creates expensive
object on demand Examples: placeholder
image, Entity Framework, cached repository
Protection proxy Used to control access to an object,
based on some authorization rules
20
![Page 21: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/21.jpg)
Proxy Pattern – Demo
21
![Page 22: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/22.jpg)
Decorator
![Page 23: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/23.jpg)
Decorator Pattern Add functionality to existing objects at run-time Wrapping original component Alternative to inheritance (class
explosion) Support Open-Closed principle
Flexible design, original object is unaware
23
![Page 24: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/24.jpg)
Class Explosion
24
![Page 25: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/25.jpg)
Preventing Class Еxplosion
LargePizzaWithCheeseHamAndPeppers Create LargePizza, apply
HamDecorator, apply CheeseDecorator and apply PeppersDecorator
25
![Page 26: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/26.jpg)
Class Explosion Refactored
26
![Page 27: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/27.jpg)
Decorator Pattern Uses Applicable in legacy systems Used to add functionality to UI controls
Can be used to extend sealed classes
In .NET: CryptoStream and GZipStream decorates Stream
In WPF Decorator classprovides a base class forelements that applyeffects onto or arounda single child element,such as Border or Viewbox
27
![Page 28: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/28.jpg)
Decorator Pattern – Demo
28
![Page 29: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/29.jpg)
Adaptera.k.a. Wrapper or Translator
![Page 30: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/30.jpg)
Adapter Pattern Converts the given class' interface into another class requested by the client Wraps an existing class with a
new interface Impedance match an old
component to a new system Allows classes to work together when this is impossible due to incompatible interfaces In languages with multiple
inheritance it is possible toadapt to more than oneclass (a.k.a. class adapters)
30
![Page 31: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/31.jpg)
Adapter Pattern (2) A single Adapter interface may work with many Adaptees
In ADO.NET we have IDataAdapter with OleDbDataAdapter, SqlClientDataAdapter Each is an adapter for its specific
database
31
Client wants to use the adaptee but can’t due to incompatible interfaces
![Page 32: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/32.jpg)
Adapter – Demo In the demo, RichCompound implements ICompound and wraps ChemicalDatabank
32
![Page 33: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/33.jpg)
Bridge
![Page 34: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/34.jpg)
Bridge Pattern Used to divide the abstraction and its implementation (they are by default coupled) That way both can be rewritten
independently Solves problems usually solved by inheritance
From: Abstraction -> ImplementationTo: Abstraction ->Abstraction ->Implementation One abstraction uses another
abstraction and they can be changed independently
34
![Page 35: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/35.jpg)
Bridge Pattern (2)
Abstraction and implementation can be extended independently
Creates “Has-A” relationship between Abstraction and Implementor “Favor composition over
inheritance”
35
Has-A
![Page 36: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/36.jpg)
Bridge Example with Burgers
From coupled: All menu
combinations
To uncoupled: Burger with
addition
Two separateconcepts
36
Bridge
![Page 37: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/37.jpg)
Bridge Pattern – Demo
37
![Page 38: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/38.jpg)
Proxy vs. Decorator vs.Adapter vs. Bridge
Proxy – to lazy-instantiate an object, or hide the fact that you're calling a remote service, or control access to the object (one-to-one interface)
Decorator – to add functionality to an object runtime (not by extending that object's type)
Adapter – to map an abstract interface to another object which has similar functional role, but a different interface (changes interface for the client)
Bridge – define both the abstract interface and the underlying implementation. I.e. you're not adapting to some legacy or third-party code, you're the designer of all the code but you need to be able to swap out different implementations (all changeable)
38
![Page 39: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/39.jpg)
форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно
програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
курсове и уроци по програмиране, книги – безплатно от Наков
безплатен курс "Качествен програмен код"
алго академия – състезателно програмиране, състезания
ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия
курс мобилни приложения с iPhone, Android, WP7, PhoneGap
free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно
?
? ? ??
?? ?
?
?
?
??
?
?
? ?
Questions?
?форум програмиране, форум уеб дизайн
курсове и уроци по програмиране, уеб дизайн – безплатно
програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
курсове и уроци по програмиране, книги – безплатно от Наков
безплатен курс "Качествен програмен код"
алго академия – състезателно програмиране, състезания
ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия
курс мобилни приложения с iPhone, Android, WP7, PhoneGap
free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно
?
? ? ??
?? ?
?
?
?
??
?
?
? ?
Questions?
?
Structural Patterns
http://academy.telerik.com
![Page 40: Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code](https://reader035.vdocuments.site/reader035/viewer/2022062804/5697bf7d1a28abf838c847df/html5/thumbnails/40.jpg)
Free Trainings @ Telerik Academy
C# Programming @ Telerik Academy csharpfundamentals.telerik.com
Telerik Software Academy academy.telerik.com
Telerik Academy @ Facebook facebook.com/TelerikAcademy
Telerik Software Academy Forums forums.academy.telerik.com 40