\
Ø Ø Adapter Ø Bridge Ø Composite Ø Decorator Ø Facade Ø Flyweight Ø Proxy
Ø Ø Structural Pattern
Ø Ø Ø Ø Ø
Ø Ø Adapter Ø Bridge Ø Composite Ø Decorator Ø Facade Ø Flyweight Ø Proxy
Ø Ø
Ø Ø Ø Ø
Ø Ø Adapter Adaptee Ø Ø
Ø Ø Adapter Pattern Wrapper Ø
Ø Client Target Adaptee + request () + specificrequest () Adapter + request () specificrequest();
Ø Ø public class Adapter extends Adaptee implements Target { } public void request() { specificrequest(); } Client Target Adaptee + request () + specificrequest () Adapter + request () specificrequest();
Ø Ø public class Adapter extends Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { } this.adaptee = adaptee; } public void request() { adaptee.specificrequest(); }
Ø Ø cry move
Ø Ø Robot Dog + + cry () move () : void : void + + wang () run () : void : void DogAdapter + + cry () move () : void : void
Ø Ø adapter
Ø Ø
Ø Ø Java C#
Ø Ø
Ø Ø Java JDBC Java SQL Ø JDBC SQL Server Oracle MySQL JDBC JDBC Ø JDBC API
Ø Ø Adapter Ø Bridge Ø Composite Ø Decorator Ø Facade Ø Flyweight Ø Proxy
Ø Ø 4
Ø 1 2
Ø Ø Ø
Ø
Ø Ø Bridge Pattern Ø
Ø Client Abstraction + operation () impl Implementor + operationimpl () RefinedAbstraction ConcreteImplementorA ConcreteImplementorB + operation () + operationimpl () + operationimpl ()
Ø Ø public interface Implementor { } public void operationimpl(); public abstract class Abstraction { protected Implementor impl; public void setimpl(implementor impl) { } this.impl = impl; } public abstract void operation();
Ø Ø public abstract class Abstraction { protected Implementor impl; public void setimpl(implementor impl) { } this.impl = impl; } public abstract void operation();
Ø Ø Abstraction Implementation
Ø Ø
Ø Ø Red + bepaint (String pentype, String name) Green : void # color : Color + + Pen setcolor (Color color) draw (String name) {abstract} : void : void color Color + bepaint (String pentype, String name) : void + bepaint (String pentype, String name) Blue + bepaint (String pentype, String name) White : void : void SmallPen + draw (String name) : void BigPen + draw (String name) : void + bepaint (String pentype, String name) Black + bepaint (String pentype, String name) : void : void MiddlePen + draw (String name) : void
Ø Ø bridge
Ø Ø
Ø Ø
Ø Ø
Ø Ø (1) JavaJava
Ø Ø (2) Java (LookAndFeel) JavaUnix Motif Windows Windows Macintosh MacintoshJava Peer Java AWT GUIPeerAWT Peer
Ø Ø
Ø Ø
Ø Ø Adapter Ø Bridge Ø Composite Ø Decorator Ø Facade Ø Flyweight Ø Proxy
Ø Ø WINDOWS s
Ø Ø Ø
Ø Ø
Ø Ø Composite Pattern - Ø
Ø Component Client + + + + operation () add (Component c) remove (Component c) getchild (int i) Leaf + operation () for(component child:children) { child.operation(); } + + + + Composite operation () add (Component c) remove (Component c) getchild (int i) children
Ø Ø Ø Ø
Ø Ø AbstractElement {abstract} + + + + add (AbstractElement element) remove (AbstractElement element) get (int i) method () : void : void : AbstractElement : void list File + method () : void - list : AbstractElement[] + + + + Folder add (AbstractElement element) remove (AbstractElement element) get (int i) method () : void : void : AbstractElement : void
Ø Ø public abstract class Component { } public abstract void add(component c); public abstract void remove(component c); public abstract Component getchild(int i); public abstract void operation();
Ø Ø public class Composite extends Component { private ArrayList list = new ArrayList(); public void add(component c) { list.add(c); } public void remove(component c) { list.remove(c); } public Component getchild(int i) { (Component)list.get(i); } public void operation() { for(object obj : list) { ((Component)obj).operation(); } } }
Ø Ø public class Leaf extends Component { } public void add(component c) { // Exception: forbidden operation } public void remove(component c) { // Exception: forbidden operation } public Component getchild(int i) { // Exception: forbidden operation } public void operation() { // Implementation }
Ø Ø (Plate) (Apple) (Banana) (Pear)
Ø Ø MyElement {abstract} + eat () : void list Apple Banana Pear - list : ArrayList Plate + eat () : void + eat () : void + eat () : void + + + eat () add (MyElement element) remove (MyElement element) : void : void : void
Ø Ø (Chapter 12 Composite\sample01)
Ø Ø Ø Ø Ø Ø
Ø Ø Ø Ø Ø
Ø Ø Ø Ø Ø
Ø Ø 1 XML <?xml version="1.0"?> <books> <book> </book> <author>carson</author> <price format="dollar">31.95</price> <pubdate>05/01/2001</pubdate> <pubinfo> <publisher>mspress</publisher> </pubinfo> </books> <state>wa</state>
Ø Ø 2
Ø Ø Adapter Ø Bridge Ø Composite Ø Decorator Ø Facade Ø Flyweight Ø Proxy
Ø
6 10 15 15 1 15 10 15 2013 Ø Ø Ø 9 2 3 Ø Decorator
Ø Ø
Ø Ø Decorator Pattern Responsibility Ø
Ø Component + operation () ConcreteComponent Decorator component + operation () component.operation(); + operation () ConcreteDecoratorA - addedstate : + operation () super.operation(); addedbehavior(); ConcreteDecoratorB + + operation () addedbehavior ()
Ø Ø Ø
Ø Ø public class Decorator extends Component { } private Component component; public Decorator(Component component) { this.component = component; } public void operation() { } component.operation();
Ø Ø public class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component component) { super(component); } public void operation() { super.operation(); addedbehavior(); } public void addedbehavior() { // } }
Ø Ø
Ø Ø
Ø Ø (decorator)
Ø Ø Ø Ø Ø Ø
Ø Ø
Ø Ø JList list = new JList(); JScrollPane sp = new JScrollPane(list);
Ø Ø 2 JDKJava IO Ø InputStream
Ø Ø 2 FilterInputStream protected volatile InputStream in; protected FilterInputStream(InputStream in) { this.in = in; } FileInputStream infs = new FileInputStream("temp/fileSrc.txt"); BufferedInputStream inbs = new BufferedInputStream(inFS); // byte[] data = new byte[1024]; inbs.read(data);
Ø Ø Adapter Ø Bridge Ø Composite Ø Decorator Ø Facade Ø Flyweight Ø Proxy