gof23种设计模式图解 - oss.xcode.me+createproducta() +createproductb() abstractfactory...

4
GOF23种设计模式图解 2015年01月10日 零度编程:www.xcode.me

Upload: others

Post on 10-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GOF23种设计模式图解 - oss.xcode.me+CreateProductA() +CreateProductB() AbstractFactory +CreateProductA() +CreateProductB() ConcreteFactory1 +CreateProductA() +CreateProductB()

GOF23种设计模式图解

2015年01月10日

零度编程:www.xcode.me

Page 2: GOF23种设计模式图解 - oss.xcode.me+CreateProductA() +CreateProductB() AbstractFactory +CreateProductA() +CreateProductB() ConcreteFactory1 +CreateProductA() +CreateProductB()

+CreateProductA()+CreateProductB()

AbstractFactory

+CreateProductA()+CreateProductB()

ConcreteFactory1

+CreateProductA()+CreateProductB()

ConcreteFactory2

Client

AbstractProductA

AbstractProductB

ProductA1 ProductA2

ProductB1 ProductB2

Client

+Request()

Target

+Request()

Adapter

+SpecificRequest()

Adaptee

adaptee.SpecificRequest()

Abstract Factory

Adapter

Bridge

Client

+Operation()

Abstraction

+OperationImp()

Implementor

RefinedAbstraction

+OperationImp()

ConcreteImplementorA

+OperationImp()

ConcreteImplementorB

implementor.OperationImp()

Builder

+Construct()

Director

+BuildPart()

Builder

+BuildPart()+GetResult()

ConcreteBuilderforeach item in structure builder.BuildPart() Product

Chain

Client

+HandleRequest()

Handler

+HandleRequest()

ConcreteHandler1

+HandleRequest()

ConcreteHandler2

Command

Client Invoker

+Execute()

Command

+Action()

Receiver

+Execute()

-state

ConcreteCommand

receiver.Action()

Composite

Client

+Operation()+Add(in Component)+Remove(in Component)+GetChild(in index : int)

Component

+Operation()

Leaf

+Operation()+Add(in Component)+Remove(in Component)+GetChild(in index : int)

Composite

foreach child in children child.Operation()

Decorator

+Operation()

Component

+Operation()

ConcreteComponent

+Operation()

Decorator

+Operation()

-addedState

ConcreteDecoratorA

+Operation()+AddedBehavior()

ConcreteDecoratorB

component.Operation()

base.Operation();AddedBehavior();

Façade

Facade

Subsystem

Factory Method

Product

ConcreteProduct

+FactoryMethod()+AnOperation()

Creator

+FactoryMethod()

ConcreteCreator

return new ConcreteProduct

product = FactoryMethod()

Flyweight

+GetFlyweight(in key)

FlyweightFactory

+Operation(in extrinsicState)

Flyweight

+Operation(in extrinsicState)

-intrinsicState

UnsharedConcreteFlyweight

+Operation(in extrinsicState)

-allState

ConcreteFlyweightClient

if flyweights[key] exists return existing flyweightelse create new flyweight add to pool of flyweights return new flyweight

Interpreter

Client

Context

+Interpret(in Context)

AbstractExpression

+Interpret(in Context)

TerminalExpression

+Interpret(in Context)

NonterminalExpression

Iterator

Mediator

Mediator

ConcreteMediator

Colleague

ConcreteColleague1 ConcreteColleague2

Client

+CreateIterator()

Aggregate

+First()+Next()+IsDone()+CurrentItem()

Iterator

+CreateIterator()

ConcreteAggregate ConcreteIterator

return new ConcreteIterator( this )

Memento

+SetMemento(in Memento)+CreateMemento()

-state

Originator

+GetState()+SetState()

-state

Memento Caretaker

return new Memento( state ) state = m.GetState()

Observer

+Attach(in Observer)+Detach(in Observer)+Notify()

Subject

+Update()

Observer

+GetState()

-subjectState

ConcreteSubject

+Update()

-observerState

ConcreteObserver

foreach o in observers o.Update()

return subjectStateobserverState = subject.GetState()

Prototype

+Clone()

Prototype

+Clone()

ConcretePrototype1

+Clone()

ConcretePrototype2

+Operation()

Client

p=prototype.Clone()

return copy of this return copy of this

Proxy

Client

+Request()

Subject

+Request()

RealSubject

+Request()

Proxy

realSubject.Request()

Singleton

-Singleton()+Instance()

-instance: Singleton

Singleton

return unique instance

State

+Request()

Context

+Handle()

State

+Handle()

ConcreteStateA

+Handle()

ConcreteStateB

state.Handle()

Strategy

+ContextInterface()

Context

+AlgorithmInterface()

Strategy

+AlgorithmInterface()

ConcreteStrategyA

+AlgorithmInterface()

ConcreteStrategyB

+AlgorithmInterface()

ConcreteStrategyC

Template

+TemplateMethod()+PrimitiveOperation1()+PrimitiveOperation2()

AbstractClass

+PrimitiveOperation1()+PrimitiveOperation2()

ConcreteClass

...PrimitiveOperation1()...PrimitiveOperation2()...

Visitor

+VisitConcreteElementA(in ConcreteElementA)+VisitConcreteElementB(in ConcreteElementB)

Visitor

+VisitConcreteElementA(in ConcreteElementA)+VisitConcreteElementB(in ConcreteElementB)

ConcreteVisitor1

+VisitConcreteElementA(in ConcreteElementA)+VisitConcreteElementB(in ConcreteElementB)

ConcreteVisitor2

ObjectStructure

+Accept(in visitor : Visitor)

Element

+Accept(in visitor : Visitor)+OperationA()

ConcreteElementA

+Accept(in visitor : Visitor)+OperationB()

ConcreteElementB

visitor.VisitConcreteElementA( this ) visitor.VisitConcreteElementB( this )

Client

Page 3: GOF23种设计模式图解 - oss.xcode.me+CreateProductA() +CreateProductB() AbstractFactory +CreateProductA() +CreateProductB() ConcreteFactory1 +CreateProductA() +CreateProductB()
Page 4: GOF23种设计模式图解 - oss.xcode.me+CreateProductA() +CreateProductB() AbstractFactory +CreateProductA() +CreateProductB() ConcreteFactory1 +CreateProductA() +CreateProductB()