ieg3080 tutorial 8 prepared by kk. outline design patterns –creational patterns –structural...

48
IEG3080 IEG3080 Tutorial 8 Tutorial 8 Prepared by KK Prepared by KK

Post on 19-Dec-2015

230 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

IEG3080 IEG3080 Tutorial 8Tutorial 8Prepared by KKPrepared by KK

Page 2: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

OutlineOutline• Design Patterns

– Creational Patterns– Structural Patterns– Behavioral Patterns

• Assignment 4

Page 3: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design PatternsDesign Patterns

Creational Structural BehavioralAbstract Factory

BuilderFactory Method

PrototypeSingleton

AdapterBridge

CompositeDecorator

FaçadeFlyweight

Proxy

Chain of Resp.CommandInterpreter

IteratorMediatorMementoObserver

StateStrategyTemplate

Visitor

Page 4: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – AdapterDesign Patterns – Adapter– Adapter

• Convert the interface of a class into another interface clients expect.

Task-Keep Target unchanged-Adapt Source interface to Target interface

Adapter

Client Target

Source

Page 5: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – AdapterDesign Patterns – Adapter class Course { protected String code; protected String title; protected int num; public Course(String courseCode) { this.code = courseCode; } public virtual void Display() { Console.WriteLine("Course name: {0}", this.code); } }

Target

Page 6: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – AdapterDesign Patterns – Adapter class CourseDataBank { public String CourseTitle(String courseCode){ String title = ""; switch(courseCode.ToLower()){ case "ieg3080a" : title = "Information And Software Engineering Practice";

break; case "ieg3080b" : title = "Information And Software Engineering Practice";

break; } return title; } public int CourseStudentNum(String courseCode){ int num = 0; switch(courseCode.ToLower()){ case "ieg3080a" : num = 37;break; case "ieg3080b" : num = 97;break; } return num; } }

Source

Page 7: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – AdapterDesign Patterns – Adapter class Program { static void Main(string[] args) { Course course = new Course("IEG3080a"); course.Display(); Course adapter = new Adapter("IEG3080a"); adapter.Display(); Console.Read(); } }

Client

Page 8: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – AdapterDesign Patterns – Adapter class Adapter : Course { private CourseDataBank bank; public Adapter(String courseCode):base(courseCode) { } public override void Display() { bank = new CourseDataBank(); this.title = bank.CourseTitle(this.code); this.num = bank.CourseStudentNum(this.code); Console.WriteLine("Course name: {0}", this.code); Console.WriteLine("Course Title: {0}", this.title); Console.WriteLine("Num of Student: {0}", this.num); } }

Adapter

Page 9: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – AdapterDesign Patterns – Adapter

Page 10: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – AdapterDesign Patterns – Adapter

Page 11: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – BridgeDesign Patterns – Bridge– Bridge

• Decouple an abstraction from its implementation so that the two can vary independently.

Task-No implementation in Abstraction

Abstraction Implementer

Page 12: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – BridgeDesign Patterns – Bridge class Abstraction { private Implementor m_Data; public Abstraction() { } public Implementor Implementor { set { m_Data = value; } get { return m_Data; } } public virtual void PrintDeadline() { m_Data.PrintDeadline(); } }

class Assignment : Abstraction { }

Abstraction

Page 13: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – BridgeDesign Patterns – Bridge abstract class Implementor { protected String m_name; public Implementor() { } public abstract void PrintDeadline(); }

Implementer

Page 14: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – BridgeDesign Patterns – Bridge class Assignment3 : Implementor { public Assignment3(){ m_name = "Assignment3"; } public override void PrintDeadline() { Console.WriteLine("{0} Deadline : 19 - 3 -2007", m_name); } } class Assignment4 : Implementor { public Assignment4(){ m_name = "Assignment4"; } public override void PrintDeadline() { Console.WriteLine("{0} Deadline : 20 - 4 -2007", m_name); } }

Implementer

Page 15: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – BridgeDesign Patterns – Bridge

Page 16: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – BridgeDesign Patterns – Bridge

Page 17: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – CompositeDesign Patterns – Composite– Composite

• Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.

Task-batch operation

ComponentLeaf

Composite

Page 18: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

class Program{ static void Main(string[] args){ Composite patterns = new Composite("Design Patterns"); Composite creational = new Composite("Creational Patterns"); creational.Add(new Leaf("Abstract Factory")); creational.Add(new Leaf("Builder")); creational.Add(new Leaf("Factory Method")); creational.Add(new Leaf("Prototype")); creational.Add(new Leaf("Singleton")); patterns.Add(creational); Composite structural = new Composite("Structural Patterns"); structural.Add(new Leaf("Adapter")); structural.Add(new Leaf("Bridge")); structural.Add(new Leaf("Composite")); structural.Add(new Leaf("Decorator")); structural.Add(new Leaf("Facade")); structural.Add(new Leaf("Flyweight")); structural.Add(new Leaf("Proxy")); patterns.Add(structural); Composite behavioral = new Composite("Behavioral Patterns"); behavioral.Add(new Leaf("Chain of Resp.")); behavioral.Add(new Leaf("Command")); behavioral.Add(new Leaf("Interpreter")); behavioral.Add(new Leaf("Iterator")); behavioral.Add(new Leaf("Mediator")); behavioral.Add(new Leaf("Memento")); behavioral.Add(new Leaf("Observer")); behavioral.Add(new Leaf("State")); behavioral.Add(new Leaf("Strategy")); behavioral.Add(new Leaf("Template Method")); behavioral.Add(new Leaf("Visitor")); patterns.Add(behavioral); patterns.Display(0); Console.Read(); } }

Client

Design Patterns – CompositeDesign Patterns – Composite

Page 19: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

abstract class Component { protected string name; // Constructor public Component(string name) { this.name = name; } public abstract void Add(Component c); public abstract void Remove(Component c); public abstract void Display(int depth); }

Component

Design Patterns – CompositeDesign Patterns – Composite

Page 20: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

class Composite : Component { private ArrayList children = new ArrayList(); public Composite(string name) : base(name) { } public override void Add(Component component){ children.Add(component); } public override void Remove(Component component){ children.Remove(component); } public override void Display(int depth) { Console.WriteLine(new String('-', depth) + name); foreach (Component component in children) { component.Display(depth + 1); } } }

Composite

Design Patterns – CompositeDesign Patterns – Composite

Page 21: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

class Leaf : Component { public Leaf(string name) : base(name) { } public override void Add(Component c) { Console.WriteLine("Invalid"); } public override void Remove(Component c) { Console.WriteLine("Invalid"); } public override void Display(int depth) { Console.WriteLine(new String('-', depth) + name); } }

Leaf

Design Patterns – CompositeDesign Patterns – Composite

Page 22: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – CompositeDesign Patterns – Composite

Page 23: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – CompositeDesign Patterns – Composite

Page 24: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – DecoratorDesign Patterns – Decorator– Decorator

• Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.

Task-Template

Component Decorator

Page 25: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – DecoratorDesign Patterns – Decorator abstract class Component { public abstract void Print(); }

class ConcreteComponent : Component { public override void Print() { Console.WriteLine("Letter body (Component)!"); } }

Component

Page 26: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – DecoratorDesign Patterns – Decorator class Program { static void Main(string[] args) { // Create ConcreteComponent and two Decorators ConcreteComponent letter = new ConcreteComponent(); ConcreteDecoratorA letter1 = new ConcreteDecoratorA(); ConcreteDecoratorB letter2 = new ConcreteDecoratorB(); // Link decorators letter1.SetComponent(letter); letter2.SetComponent(letter1); letter2.Print(); // Wait for user Console.Read(); } }

Client

Page 27: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – DecoratorDesign Patterns – Decorator abstract class Decorator : Component { protected Component component; public void SetComponent(Component component) { this.component = component; } public override void Print() { if (component != null) { component.Print(); } } }

Decorator

Page 28: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – DecoratorDesign Patterns – Decorator class ConcreteDecoratorA : Decorator { private string addedState; public override void Print() { Console.WriteLine("Dear Students,"); base.Print(); addedState = "New State"; Console.WriteLine("Thanks!"); } }

class ConcreteDecoratorB : Decorator { public override void Print() { Console.WriteLine("------------------------------------"); base.Print(); AddedBehavior(); Console.WriteLine("------------------------------------"); } void AddedBehavior() { Console.WriteLine("Regards"); Console.WriteLine("KK"); } }

Decorator

Page 29: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – DecoratorDesign Patterns – Decorator

Page 30: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – DecoratorDesign Patterns – Decorator

Page 31: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – FaçadeDesign Patterns – Façade– Façade

• Provide a unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.

Task-Linking independent classes together

Facade Subsystem

Page 32: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – FaçadeDesign Patterns – Façade class Program { static void Main(string[] args) { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); // Wait for user Console.Read(); } }

Client

Page 33: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – FaçadeDesign Patterns – Façade class SubSystem1 { public void Method1() { Console.WriteLine(" SubSystem1 Method"); } } class SubSystem2 { public void Method2() { Console.WriteLine(" SubSystem2 Method"); } } class SubSystem3 { public void Method3() { Console.WriteLine(" SubSystem3 Method"); } }

Subsystem

Page 34: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – FaçadeDesign Patterns – Façade class Facade { SubSystem1 sys1; SubSystem2 sys2; SubSystem3 sys3; public Facade() { sys1 = new SubSystem1(); sys2 = new SubSystem2(); sys3 = new SubSystem3(); } public void MethodA() { Console.WriteLine("\nMethodA() ---- "); sys1.Method1(); sys2.Method2(); } public void MethodB() { Console.WriteLine("\nMethodB() ---- "); sys2.Method2(); sys3.Method3(); } }

Facade

Page 35: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – FaçadeDesign Patterns – Façade

Page 36: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design Patterns – FaçadeDesign Patterns – Façade

Page 37: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Design PatternsDesign Patterns• References

– Gamma, Erich et al, “Design Patterns: Elements of Reusable Object-Oriented Software,” Addison-Wesley.

– Design Patterns with C# sample code: http://www.dofactory.com/Patterns/Patterns.aspx

Page 38: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4

Page 39: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4

Page 40: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4

Page 41: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4• Create a new project, such as a Windows

Application • Run wsdl.exe GoogleSearch.wsdl to generate

GoogleSearchService.cs, the C# client class. • Add a reference to the System.Web.Services

DLL to your project. • Write your code to call GoogleSearchService.

Page 42: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4

Page 43: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4

Page 44: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4• 1 mark will be deducted if the api key is not filled in

Page 45: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4• 1 mark will be deducted if not fullfill this requirement

Page 46: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4

Page 47: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4

Page 48: IEG3080 Tutorial 8 Prepared by KK. Outline Design Patterns –Creational Patterns –Structural Patterns –Behavioral Patterns Assignment 4

Assignment 4Assignment 4• http://code.google.com/apis/soapsearch/• http://course.ie.cuhk.edu.hk/~ieg3080a/assignment/Google

WSold.zip• http://course.ie.cuhk.edu.hk/~ieg3080a/assignment/Google

WS.zip

• 2 marks will be deducted for late submission