Professional Documents
Culture Documents
Java Java
1. .............................................................................................................2
1.1 .................................................................................................3
1.1.1 FactoryMethod.............................................................3
1.1.2 AbstractFactory............................................................6
1.1.3 Builder....................................................................10
1.1.4 Singleton....................................................................14
1.1.5 Prototype...................................................................15
1.2 ...............................................................................................18
1.2.1 Adapter...................................................................18
1.2.2 Bridge........................................................................20
1.2.3 Composite..................................................................24
1.2.4 Decorator...................................................................28
1.2.5 Facade.......................................................................30
1.2.6 Flyweight....................................................................33
1.2.7 Proxy..........................................................................36
1.3 ...............................................................................................40
1.3.1 Chain of Responsibility...........................................40
1.3.2 Command..................................................................44
1.3.3 Interpreter..............................................................48
1.3.4 Iterator....................................................................51
1.3.5 Mediator.................................................................55
1.3.6 Memento.................................................................58
1.3.7 Observer.................................................................61
1.3.8 State..........................................................................66
1.3.9 Strategy.....................................................................68
1.3.10 TemplateMethod......................................................71
1.3.11 Visitor...................................................................73
Java Java
1.
*
Java Java
**
Java Java
Java http://www.crazyit.org
Java ID
JavaJava EE *
yangenxiong@163.com
Java
* Apache 2.0 (
) Apache 2.0
2
Java Java
1.1
FactoryMethod ( )
AbstractFactory ( )
Singleton ( )
Builder ( )
Prototype ( )
1.1.1 FactoryMethod
FactoryMethod
1.
2.
3.
1.Product
2.ConcreteProduct
Product
3.Creator
Product *
Creator
ConcreteProduct
Product
4.ConcreteCreator
ConcreteProduct
Java Java
Java
product
Java Java
}
Creator
Java Java
result
!
!
FACTORY METHOD MM MM
Factory Method MM
MM
1.1.2 AbstractFactory
1.
2.
3.
4.
1.AbstractFactory
2.ConcreteFactory
3.AbstractProduct
Java Java
4.ConcreteProduct
*
abstractProduct
5.Client
AbstractFactory AbstractProduct
Java
abstractFactory
Java Java
IDog createDog();
}
ConcreteFactory
Java Java
Java Java
ABSTRACT FACTORY MM
MM MM
Factory
1.1.3 Builder
1.
2.
1.Builder
Product
2.ConcreteBuilder
Builder
3.Director
Builder
4.Product
ConcreteBuilder
10
Java Java
Builder
Java Java
}
public void buildFoot() {
person.setFoot("");
}
public void buildHead() {
person.setHead("");
}
public Person buildPerson() {
return person;
}
}
Director
Java Java
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
public class Man extends Person {
}
Test
BUILDERMM MM,
MM
MM builder
13
Java Java
1.1.4 Singleton
1.
2.
Singleton
Instance Instance
Singleton
Java Java
singleton.Singleton@1c78e57
singleton.Singleton@1c78e57
SINGLETON 6
Sigleton(
)
1.1.5 Prototype
1.
2.
3.
4.
15
Java Java
1. Prototype
2. ConcretePrototype
3. Client
Prototype
Java Java
}
}
}
ConcretePrototype
prototype
prototype
PROTOTYPE MM QQ
copy QQ prototype
100
17
Java Java
1.2
Adapter ( )
Bridge ( )
Composite ( )
Decorator ( )
Facade ( )
Flyweight ( )
Proxy ( )
1.2.1 Adapter
Adapter
1.
2.
3. Adapter
1.Target
Client
2.Client
Target
3.Adaptee
18
Java Java
4.Adapter
Adaptee Target
Target
Java Java
Adaptee method!
Adapter method!
ADAPTER Sarah
kent Sarah
Adapter Sarah ()
1.2.2 Bridge
1.
2.
20
Java Java
Bridge
3.
4.C++ C++
Rumbaugh nested
generalizations
5.
Coplien String [ C o p 9 2 ]
S t r i n g R e p
1.Abstraction
Implementor
2.RefinedAbstraction
Abstraction
3.Implementor
Abstraction
Implementor Abstraction
4.ConcreteImplementor
Implementor
21
Java Java
Abstraction
22
Java Java
Java Java
BRIDGE MM MM MM
MM
MM BRIDGE
1.2.3 Composite
"-"Composite
1.-
24
Java Java
2.
1.Component
Component
()*
2.Leaf
3.Composite
*
Component *
4.Client
Component
Component
Java Java
Java Java
setName(name);
employers = null;//,
}
public void add(Employer employer) {
}
public void delete(Employer employer) {
}
}
Composite
Java Java
System.out.println(em.getName());
}
}
}
result
COMPOSITEMary
T
T
MM Composite
1.2.4 Decorator
Decorator
1.
2.
3.
1.Component
2.ConcreteComponent
28
Java Java
3.Decorator
Component Component
4.ConcreteDecorator
Component
Java Java
30
Java Java
ManDecoratorA
===============
ManDecoratorB
1.2.5 Facade
Facade
1.
Facade
facade
2. facade
3. facade
facade
1.Facade
2.Subsystemclasses
Facade
facade Facade
31
Java Java
Facade
Facade() {
= new ServiceAImpl();
= new ServiceBImpl();
= new ServiceCImpl();
Java Java
}
}
Subsystemclasses
Java Java
A
B
========
A
B
B
C
1.2.6 Flyweight
Flyweight
1.
2.
3.
4.
5. Flyweight
1.Flyweight
flyweight
2.ConcreteFlyweight
Flyweight
ConcreteFlyweight
ConcreteFlyweight
3.UnsharedConcreteFlyweight
Flyweight Flyweight
34
Java Java
Flyweight UnsharedConcreteFlyweight
ConcreteFlyweight
4.FlyweightFactory
flyweight
flyweight flyweight
FlyweightFactory
Flyweight
35
Java Java
36
Java Java
:
true
:
:
:
4
1
2
3
4
1.2.7 Proxy
Proxy
Proxy
1.RemoteProxy
2.VirtualProxy
3.ProtectionProxy
4.SmartReference
5.
1.Proxy
RealSubject Subject
Proxy Subject
Subject
37
Java Java
*
*
2.RemoteProxy
3.VirtualProxy
4.ProtectionProxy
5.Subject
RealSubject Proxy RealSubject
* Proxy
6.RealSubject
Proxy
Proxy
Java Java
========
========
========
========
:
abstract public class Subject{
abstract public void request();
}
39
Java Java
: Subject request()
public class RealSubject extends Subject{
public RealSubject() { }
public void request(){
System.out.println ("From real subject.");
}
}
:
public class ProxySubject extends Subject{
private RealSubject realSubject;
public ProxySubject() { }
public void request() { request
preRequest();
if ( realSubject == null ) {
realSubject = new RealSubject();
}
realSubject.request(); request
postRequest();
}
:
Subject sub = new ProxySubject();
Sub.request();
, RealSubject request ()
, ProxySubject RealSubject , ,
(preRequest(),postRequest()),
, ,
1.3
Chain of Responsibility ( )
Command ( )
Interpreter ( )
40
Java Java
Iterator ( )
Mediator ( )
Memento ( )
Observer ( )
State ( * )
Strategy ( )
TemplateMethod ( )
Vis*tor ( )
1.
2.
3.
1.Handler
2.ConcreteHandler
3.Client
(ConcreteHandler)
41
Java Java
Handler
Java Java
Java Java
//team leader
request = new AddMoneyRequest();
tl.handleRequest(request);
System.out.println("========");
//
request = new DimissionRequest();
pm.handleRequest(request);
}
}
result
, !
===========
, !
========
, !
CHAIN OF RESPONSIBLEITY
MM Hi,
MM
!
44
Java Java
1.3.2 Command
1.
callback
Command
2.
Command
3.
Command Excute
Command Unexecute
Execute
Unexecute
Execute
4.
Command
Execute
5.
( transaction )
Command
Command
1.Command
2.ConcreteCommand
45
Java Java
Execute
3.Client
Client
Invoker
4.Invoker
5.Receiver
Command
Java Java
this.receiver = receiver;
}
public abstract void execute();
}
ConcreteCommand
Java Java
Receiver
COMMAND MM
COMMAND
COMMAND
48
Java Java
1.3.3 Interpreter
1.,
2.
,
, ,
1.AbstractExpression()
2.TerminalExpression() AdvanceExpression
3.NonterminalExpression() SimpleExpression
(Interpret)
4.Context
5.Client
()**
NonterminalExpression TerminalExpression
49
Java Java
AbstractExpression
Java Java
!
!
!
INTERPRETER MM MM
MM Interpreter
51
Java Java
1.3.4 Iterator
1.
2.
3.(,)
1.Iterator
2.ConcreteIterator
3.Aggregate
4.ConcreteAggregate
ConcreteIterator
.
52
Java Java
Iterator
53
Java Java
Java Java
}
public Object get(int index) {
return list[index];
}
public int getSize() {
return this.size;
}
public void add(Object obj) {
list[index++] = obj;
size++;
}
}
Test
a
b
c
=====
a
55
Java Java
b
c
Mary
Mary
Mary
Mary
Mary
1.3.5 Mediator
1.
2.,
3.
1.Mediator
Colleague
56
Java Java
2.ConcreteMediator
*
3.Colleagueclass
Mediator
Java Java
if (content.equals("client")) {
//, B
cb.action();
}
}
}
Colleagueclass
MEDIATOR MM
OK MM
58
Java Java
1.3.6 Memento
1.(),
59
Java Java
2.
1.Memento
2.Originator
,*
.
3.Caretaker
Memento
Java Java
Java Java
}
Test
MEMENTO MM MM
MM MM
1.3.7 Observer
,,
62
Java Java
1.,
2.,
3.
1.Subject
2.Observer
3.ConcreteSubject
ConcreteObserver
,
4.ConcreteObserver
ConcreteSubject
Observer *
63
Java Java
Subject
Java Java
65
Java Java
, !
,
===========
,
, !
OBSERVER MM MM
tom
66
Java Java
1.3.8 State
1.,
2.
,
State
1.Context
ConcreteState
2.State
Context
3.ConcreteStatesubclasses
Context *
67
Java Java
Context
68
Java Java
===============
STATE MM
MM
MM
MM
MM
69
Java Java
1.3.9 Strategy
,,
1.
2.
3.
4.,
Strategy
1.Strategy
Context
ConcreteStrategy
2.ConcreteStrategy
Strategy
3.Context
ConcreteStrateg*
Strategy
Stategy
70
Java Java
Strategy
Java Java
STRATEGY MM
MM
MM Strategy
1.3.10 TemplateMethod
TemplateMethod
1.
72
Java Java
2.
3.
1.AbstractClass
primitiveoperation
,
AbstractClass
2.ConcreteClass
*
AbstractClass
Java Java
TEMPLATE METHOD
(Template method)
()
74
Java Java
1.3.11 Visitor
1.
*
2.*
Visitor
Visitor
3.
*
1.Visitor
ConcreteEle*ent Visit
*isit
*
*
2.Concret*Visitor
Visitor
Concret*Visitor**
*
3.Element
Accept *
4.ConcreteElement
Accept
5.ObjectStru*ture
75
Java Java
Visitor
Java Java
Java Java
}
}
Test
abc
1.5
===========
abc
abc
abc
1.5
1.5
1.5
VISITOR MM MM
Visitor
MM
78
Java Java
79