Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
datax-cloud
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄营
datax-cloud
Commits
1365e260
Commit
1365e260
authored
Mar 06, 2020
by
yuwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
java设计模式
parent
e183bd2c
Hide whitespace changes
Inline
Side-by-side
Showing
50 changed files
with
784 additions
and
0 deletions
+784
-0
AbstractLogger.java
...ning/design/patterns/behavioral/chain/AbstractLogger.java
+30
-0
ChainPatternDemo.java
...ng/design/patterns/behavioral/chain/ChainPatternDemo.java
+28
-0
ConsoleLogger.java
...rning/design/patterns/behavioral/chain/ConsoleLogger.java
+13
-0
ErrorLogger.java
...earning/design/patterns/behavioral/chain/ErrorLogger.java
+13
-0
FileLogger.java
...learning/design/patterns/behavioral/chain/FileLogger.java
+13
-0
Broker.java
...x/learning/design/patterns/behavioral/command/Broker.java
+20
-0
BuyStock.java
...learning/design/patterns/behavioral/command/BuyStock.java
+14
-0
CommandPatternDemo.java
...esign/patterns/behavioral/command/CommandPatternDemo.java
+20
-0
Order.java
...ax/learning/design/patterns/behavioral/command/Order.java
+6
-0
SellStock.java
...earning/design/patterns/behavioral/command/SellStock.java
+14
-0
Stock.java
...ax/learning/design/patterns/behavioral/command/Stock.java
+16
-0
AndExpression.java
...design/patterns/behavioral/interpreter/AndExpression.java
+17
-0
Expression.java
...ng/design/patterns/behavioral/interpreter/Expression.java
+6
-0
InterpreterPatternDemo.java
...tterns/behavioral/interpreter/InterpreterPatternDemo.java
+29
-0
OrExpression.java
.../design/patterns/behavioral/interpreter/OrExpression.java
+17
-0
TerminalExpression.java
...n/patterns/behavioral/interpreter/TerminalExpression.java
+18
-0
Container.java
...arning/design/patterns/behavioral/iterator/Container.java
+6
-0
Iterator.java
...earning/design/patterns/behavioral/iterator/Iterator.java
+8
-0
IteratorPatternDemo.java
...ign/patterns/behavioral/iterator/IteratorPatternDemo.java
+16
-0
NameRepository.java
...g/design/patterns/behavioral/iterator/NameRepository.java
+11
-0
StringArrayIterator.java
...ign/patterns/behavioral/iterator/StringArrayIterator.java
+28
-0
ChatRoom.java
...earning/design/patterns/behavioral/mediator/ChatRoom.java
+11
-0
MediatorPatternDemo.java
...ign/patterns/behavioral/mediator/MediatorPatternDemo.java
+15
-0
User.java
...ax/learning/design/patterns/behavioral/mediator/User.java
+22
-0
CareTaker.java
...earning/design/patterns/behavioral/memento/CareTaker.java
+17
-0
Memento.java
.../learning/design/patterns/behavioral/memento/Memento.java
+14
-0
MementoPatternDemo.java
...esign/patterns/behavioral/memento/MementoPatternDemo.java
+24
-0
Originator.java
...arning/design/patterns/behavioral/memento/Originator.java
+22
-0
AbstractCustomer.java
...ign/patterns/behavioral/nullPattern/AbstractCustomer.java
+10
-0
CustomerFactory.java
...sign/patterns/behavioral/nullPattern/CustomerFactory.java
+15
-0
NullCustomer.java
.../design/patterns/behavioral/nullPattern/NullCustomer.java
+14
-0
NullPatternDemo.java
...sign/patterns/behavioral/nullPattern/NullPatternDemo.java
+20
-0
RealCustomer.java
.../design/patterns/behavioral/nullPattern/RealCustomer.java
+18
-0
BinaryObserver.java
...g/design/patterns/behavioral/observer/BinaryObserver.java
+15
-0
HexaObserver.java
...ing/design/patterns/behavioral/observer/HexaObserver.java
+15
-0
Observer.java
...earning/design/patterns/behavioral/observer/Observer.java
+8
-0
ObserverPatternDemo.java
...ign/patterns/behavioral/observer/ObserverPatternDemo.java
+20
-0
OctalObserver.java
...ng/design/patterns/behavioral/observer/OctalObserver.java
+15
-0
Subject.java
...learning/design/patterns/behavioral/observer/Subject.java
+30
-0
Context.java
...ax/learning/design/patterns/behavioral/state/Context.java
+18
-0
StartState.java
...learning/design/patterns/behavioral/state/StartState.java
+13
-0
State.java
...atax/learning/design/patterns/behavioral/state/State.java
+6
-0
StatePatternDemo.java
...ng/design/patterns/behavioral/state/StatePatternDemo.java
+21
-0
StopState.java
.../learning/design/patterns/behavioral/state/StopState.java
+13
-0
Context.java
...learning/design/patterns/behavioral/strategy/Context.java
+16
-0
OperationAdd.java
...ing/design/patterns/behavioral/strategy/OperationAdd.java
+9
-0
OperationMultiply.java
...esign/patterns/behavioral/strategy/OperationMultiply.java
+9
-0
OperationSubstract.java
...sign/patterns/behavioral/strategy/OperationSubstract.java
+9
-0
Strategy.java
...earning/design/patterns/behavioral/strategy/Strategy.java
+6
-0
StrategyPatternDemo.java
...ign/patterns/behavioral/strategy/StrategyPatternDemo.java
+16
-0
No files found.
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/chain/AbstractLogger.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
chain
;
public
abstract
class
AbstractLogger
{
public
static
int
INFO
=
1
;
public
static
int
DEBUG
=
2
;
public
static
int
ERROR
=
3
;
protected
int
level
;
//责任链中的下一个元素
protected
AbstractLogger
nextLogger
;
public
void
setNextLogger
(
AbstractLogger
nextLogger
)
{
this
.
nextLogger
=
nextLogger
;
}
public
void
logMessage
(
int
level
,
String
message
)
{
if
(
this
.
level
<=
level
)
{
write
(
message
);
}
if
(
nextLogger
!=
null
)
{
nextLogger
.
logMessage
(
level
,
message
);
}
}
abstract
protected
void
write
(
String
message
);
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/chain/ChainPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
chain
;
/**
* 责任链模式(Chain of Responsibility Pattern)
*/
public
class
ChainPatternDemo
{
private
static
AbstractLogger
getChainOfLoggers
(){
AbstractLogger
errorLogger
=
new
ErrorLogger
(
AbstractLogger
.
ERROR
);
AbstractLogger
fileLogger
=
new
FileLogger
(
AbstractLogger
.
DEBUG
);
AbstractLogger
consoleLogger
=
new
ConsoleLogger
(
AbstractLogger
.
INFO
);
errorLogger
.
setNextLogger
(
fileLogger
);
fileLogger
.
setNextLogger
(
consoleLogger
);
return
errorLogger
;
}
public
static
void
main
(
String
[]
args
)
{
AbstractLogger
loggerChain
=
getChainOfLoggers
();
loggerChain
.
logMessage
(
AbstractLogger
.
INFO
,
"This is an information."
);
loggerChain
.
logMessage
(
AbstractLogger
.
DEBUG
,
"This is a debug level information."
);
loggerChain
.
logMessage
(
AbstractLogger
.
ERROR
,
"This is an error information."
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/chain/ConsoleLogger.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
chain
;
public
class
ConsoleLogger
extends
AbstractLogger
{
public
ConsoleLogger
(
int
level
)
{
this
.
level
=
level
;
}
@Override
protected
void
write
(
String
message
)
{
System
.
out
.
println
(
"Standard Console::Logger: "
+
message
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/chain/ErrorLogger.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
chain
;
public
class
ErrorLogger
extends
AbstractLogger
{
public
ErrorLogger
(
int
level
)
{
this
.
level
=
level
;
}
@Override
protected
void
write
(
String
message
)
{
System
.
out
.
println
(
"Error Console::Logger: "
+
message
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/chain/FileLogger.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
chain
;
public
class
FileLogger
extends
AbstractLogger
{
public
FileLogger
(
int
level
)
{
this
.
level
=
level
;
}
@Override
protected
void
write
(
String
message
)
{
System
.
out
.
println
(
"File::Logger: "
+
message
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/command/Broker.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
command
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
Broker
{
private
List
<
Order
>
orderList
=
new
ArrayList
<
Order
>();
public
void
takeOrder
(
Order
order
)
{
orderList
.
add
(
order
);
}
public
void
placeOrders
()
{
for
(
Order
order
:
orderList
)
{
order
.
execute
();
}
orderList
.
clear
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/command/BuyStock.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
command
;
public
class
BuyStock
implements
Order
{
private
Stock
abcStock
;
public
BuyStock
(
Stock
abcStock
)
{
this
.
abcStock
=
abcStock
;
}
public
void
execute
()
{
abcStock
.
buy
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/command/CommandPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
command
;
/**
* 命令模式(Command Pattern)
*/
public
class
CommandPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Stock
abcStock
=
new
Stock
();
BuyStock
buyStockOrder
=
new
BuyStock
(
abcStock
);
SellStock
sellStockOrder
=
new
SellStock
(
abcStock
);
Broker
broker
=
new
Broker
();
broker
.
takeOrder
(
buyStockOrder
);
broker
.
takeOrder
(
sellStockOrder
);
broker
.
placeOrders
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/command/Order.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
command
;
public
interface
Order
{
void
execute
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/command/SellStock.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
command
;
public
class
SellStock
implements
Order
{
private
Stock
abcStock
;
public
SellStock
(
Stock
abcStock
)
{
this
.
abcStock
=
abcStock
;
}
public
void
execute
()
{
abcStock
.
sell
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/command/Stock.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
command
;
public
class
Stock
{
private
String
name
=
"ABC"
;
private
int
quantity
=
10
;
public
void
buy
()
{
System
.
out
.
println
(
"Stock [ Name: "
+
name
+
", Quantity: "
+
quantity
+
" ] bought"
);
}
public
void
sell
()
{
System
.
out
.
println
(
"Stock [ Name: "
+
name
+
", Quantity: "
+
quantity
+
" ] sold"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/interpreter/AndExpression.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
interpreter
;
public
class
AndExpression
implements
Expression
{
private
Expression
expr1
=
null
;
private
Expression
expr2
=
null
;
public
AndExpression
(
Expression
expr1
,
Expression
expr2
)
{
this
.
expr1
=
expr1
;
this
.
expr2
=
expr2
;
}
@Override
public
boolean
interpret
(
String
context
)
{
return
expr1
.
interpret
(
context
)
&&
expr2
.
interpret
(
context
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/interpreter/Expression.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
interpreter
;
public
interface
Expression
{
public
boolean
interpret
(
String
context
);
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/interpreter/InterpreterPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
interpreter
;
/**
* 解释器模式(Interpreter Pattern)
*/
public
class
InterpreterPatternDemo
{
//规则:Robert 和 John 是男性
public
static
Expression
getMaleExpression
()
{
Expression
robert
=
new
TerminalExpression
(
"Robert"
);
Expression
john
=
new
TerminalExpression
(
"John"
);
return
new
OrExpression
(
robert
,
john
);
}
//规则:Julie 是一个已婚的女性
public
static
Expression
getMarriedWomanExpression
()
{
Expression
julie
=
new
TerminalExpression
(
"Julie"
);
Expression
married
=
new
TerminalExpression
(
"Married"
);
return
new
AndExpression
(
julie
,
married
);
}
public
static
void
main
(
String
[]
args
)
{
Expression
isMale
=
getMaleExpression
();
Expression
isMarriedWoman
=
getMarriedWomanExpression
();
System
.
out
.
println
(
"John is male? "
+
isMale
.
interpret
(
"John"
));
System
.
out
.
println
(
"Julie is a married women? "
+
isMarriedWoman
.
interpret
(
"Married Julie"
));
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/interpreter/OrExpression.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
interpreter
;
public
class
OrExpression
implements
Expression
{
private
Expression
expr1
=
null
;
private
Expression
expr2
=
null
;
public
OrExpression
(
Expression
expr1
,
Expression
expr2
)
{
this
.
expr1
=
expr1
;
this
.
expr2
=
expr2
;
}
@Override
public
boolean
interpret
(
String
context
)
{
return
expr1
.
interpret
(
context
)
||
expr2
.
interpret
(
context
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/interpreter/TerminalExpression.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
interpreter
;
public
class
TerminalExpression
implements
Expression
{
private
String
data
;
public
TerminalExpression
(
String
data
)
{
this
.
data
=
data
;
}
@Override
public
boolean
interpret
(
String
context
)
{
if
(
context
.
contains
(
data
))
{
return
true
;
}
return
false
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/iterator/Container.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
iterator
;
public
interface
Container
{
public
Iterator
getIterator
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/iterator/Iterator.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
iterator
;
public
interface
Iterator
{
public
boolean
hasNext
();
public
Object
next
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/iterator/IteratorPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
iterator
;
/**
* 迭代器模式(Iterator Pattern)
*/
public
class
IteratorPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
NameRepository
namesRepository
=
new
NameRepository
();
for
(
Iterator
iter
=
namesRepository
.
getIterator
();
iter
.
hasNext
();)
{
String
name
=
(
String
)
iter
.
next
();
System
.
out
.
println
(
"Name : "
+
name
);
}
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/iterator/NameRepository.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
iterator
;
public
class
NameRepository
implements
Container
{
public
String
names
[]
=
{
"Robert"
,
"John"
,
"Julie"
,
"Lora"
};
@Override
public
Iterator
getIterator
()
{
return
new
StringArrayIterator
(
names
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/iterator/StringArrayIterator.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
iterator
;
public
class
StringArrayIterator
implements
Iterator
{
String
[]
args
;
int
index
=
0
;
public
StringArrayIterator
(
String
[]
argsTemp
)
{
this
.
args
=
argsTemp
;
}
@Override
public
boolean
hasNext
(){
if
(
index
<
args
.
length
){
return
true
;
}
return
false
;
}
@Override
public
Object
next
(){
if
(
index
<
args
.
length
){
return
args
[
index
++];
}
return
null
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/mediator/ChatRoom.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
mediator
;
import
java.util.Date
;
public
class
ChatRoom
{
public
static
void
showMessage
(
User
user
,
String
message
)
{
System
.
out
.
println
(
new
Date
().
toString
()
+
" ["
+
user
.
getName
()
+
"] : "
+
message
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/mediator/MediatorPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
mediator
;
/**
* 中介者模式(Mediator Pattern)
*/
public
class
MediatorPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
User
robert
=
new
User
(
"Robert"
);
User
john
=
new
User
(
"John"
);
robert
.
sendMessage
(
"Hi! John!"
);
john
.
sendMessage
(
"Hello! Robert!"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/mediator/User.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
mediator
;
public
class
User
{
private
String
name
;
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
User
(
String
name
)
{
this
.
name
=
name
;
}
public
void
sendMessage
(
String
message
)
{
ChatRoom
.
showMessage
(
this
,
message
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/memento/CareTaker.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
memento
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
CareTaker
{
private
List
<
Memento
>
mementoList
=
new
ArrayList
<
Memento
>();
public
void
add
(
Memento
state
)
{
mementoList
.
add
(
state
);
}
public
Memento
get
(
int
index
)
{
return
mementoList
.
get
(
index
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/memento/Memento.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
memento
;
public
class
Memento
{
private
String
state
;
public
Memento
(
String
state
)
{
this
.
state
=
state
;
}
public
String
getState
()
{
return
state
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/memento/MementoPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
memento
;
/**
* 备忘录模式(Memento Pattern)
*/
public
class
MementoPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Originator
originator
=
new
Originator
();
CareTaker
careTaker
=
new
CareTaker
();
originator
.
setState
(
"State #1"
);
originator
.
setState
(
"State #2"
);
careTaker
.
add
(
originator
.
saveStateToMemento
());
originator
.
setState
(
"State #3"
);
careTaker
.
add
(
originator
.
saveStateToMemento
());
originator
.
setState
(
"State #4"
);
System
.
out
.
println
(
"Current State: "
+
originator
.
getState
());
originator
.
getStateFromMemento
(
careTaker
.
get
(
0
));
System
.
out
.
println
(
"First saved State: "
+
originator
.
getState
());
originator
.
getStateFromMemento
(
careTaker
.
get
(
1
));
System
.
out
.
println
(
"Second saved State: "
+
originator
.
getState
());
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/memento/Originator.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
memento
;
public
class
Originator
{
private
String
state
;
public
void
setState
(
String
state
)
{
this
.
state
=
state
;
}
public
String
getState
()
{
return
state
;
}
public
Memento
saveStateToMemento
()
{
return
new
Memento
(
state
);
}
public
void
getStateFromMemento
(
Memento
Memento
)
{
state
=
Memento
.
getState
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/nullPattern/AbstractCustomer.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
nullPattern
;
public
abstract
class
AbstractCustomer
{
protected
String
name
;
public
abstract
boolean
isNil
();
public
abstract
String
getName
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/nullPattern/CustomerFactory.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
nullPattern
;
public
class
CustomerFactory
{
public
static
final
String
[]
names
=
{
"Rob"
,
"Joe"
,
"Julie"
};
public
static
AbstractCustomer
getCustomer
(
String
name
)
{
for
(
int
i
=
0
;
i
<
names
.
length
;
i
++)
{
if
(
names
[
i
].
equalsIgnoreCase
(
name
))
{
return
new
RealCustomer
(
name
);
}
}
return
new
NullCustomer
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/nullPattern/NullCustomer.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
nullPattern
;
public
class
NullCustomer
extends
AbstractCustomer
{
@Override
public
String
getName
()
{
return
"Not Available in Customer Database"
;
}
@Override
public
boolean
isNil
()
{
return
true
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/nullPattern/NullPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
nullPattern
;
/**
* 空对象模式(Null Object Pattern)
*/
public
class
NullPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
AbstractCustomer
customer1
=
CustomerFactory
.
getCustomer
(
"Rob"
);
AbstractCustomer
customer2
=
CustomerFactory
.
getCustomer
(
"Bob"
);
AbstractCustomer
customer3
=
CustomerFactory
.
getCustomer
(
"Julie"
);
AbstractCustomer
customer4
=
CustomerFactory
.
getCustomer
(
"Laura"
);
System
.
out
.
println
(
"Customers"
);
System
.
out
.
println
(
customer1
.
getName
());
System
.
out
.
println
(
customer2
.
getName
());
System
.
out
.
println
(
customer3
.
getName
());
System
.
out
.
println
(
customer4
.
getName
());
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/nullPattern/RealCustomer.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
nullPattern
;
public
class
RealCustomer
extends
AbstractCustomer
{
public
RealCustomer
(
String
name
)
{
this
.
name
=
name
;
}
@Override
public
String
getName
()
{
return
name
;
}
@Override
public
boolean
isNil
()
{
return
false
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/observer/BinaryObserver.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
observer
;
public
class
BinaryObserver
extends
Observer
{
public
BinaryObserver
(
Subject
subject
)
{
this
.
subject
=
subject
;
this
.
subject
.
attach
(
this
);
}
@Override
public
void
update
()
{
System
.
out
.
println
(
"Binary String: "
+
Integer
.
toBinaryString
(
subject
.
getState
()));
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/observer/HexaObserver.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
observer
;
public
class
HexaObserver
extends
Observer
{
public
HexaObserver
(
Subject
subject
)
{
this
.
subject
=
subject
;
this
.
subject
.
attach
(
this
);
}
@Override
public
void
update
()
{
System
.
out
.
println
(
"Hex String: "
+
Integer
.
toHexString
(
subject
.
getState
()).
toUpperCase
());
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/observer/Observer.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
observer
;
public
abstract
class
Observer
{
protected
Subject
subject
;
public
abstract
void
update
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/observer/ObserverPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
observer
;
/**
* 观察者模式(Observer Pattern)
*/
public
class
ObserverPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Subject
subject
=
new
Subject
();
new
HexaObserver
(
subject
);
new
OctalObserver
(
subject
);
new
BinaryObserver
(
subject
);
System
.
out
.
println
(
"First state change: 15"
);
subject
.
setState
(
15
);
System
.
out
.
println
(
"Second state change: 10"
);
subject
.
setState
(
10
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/observer/OctalObserver.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
observer
;
public
class
OctalObserver
extends
Observer
{
public
OctalObserver
(
Subject
subject
)
{
this
.
subject
=
subject
;
this
.
subject
.
attach
(
this
);
}
@Override
public
void
update
()
{
System
.
out
.
println
(
"Octal String: "
+
Integer
.
toOctalString
(
subject
.
getState
()));
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/observer/Subject.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
observer
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
Subject
{
private
List
<
Observer
>
observers
=
new
ArrayList
<
Observer
>();
private
int
state
;
public
int
getState
()
{
return
state
;
}
public
void
setState
(
int
state
)
{
this
.
state
=
state
;
notifyAllObservers
();
}
public
void
attach
(
Observer
observer
)
{
observers
.
add
(
observer
);
}
public
void
notifyAllObservers
()
{
for
(
Observer
observer
:
observers
)
{
observer
.
update
();
}
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/state/Context.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
state
;
public
class
Context
{
private
State
state
;
public
Context
(){
state
=
null
;
}
public
void
setState
(
State
state
)
{
this
.
state
=
state
;
}
public
State
getState
()
{
return
state
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/state/StartState.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
state
;
public
class
StartState
implements
State
{
public
void
doAction
(
Context
context
)
{
System
.
out
.
println
(
"Player is in start state"
);
context
.
setState
(
this
);
}
public
String
toString
()
{
return
"Start State"
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/state/State.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
state
;
public
interface
State
{
public
void
doAction
(
Context
context
);
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/state/StatePatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
state
;
/**
* 状态模式(State Pattern)
*/
public
class
StatePatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Context
context
=
new
Context
();
StartState
startState
=
new
StartState
();
startState
.
doAction
(
context
);
System
.
out
.
println
(
context
.
getState
().
toString
());
StopState
stopState
=
new
StopState
();
stopState
.
doAction
(
context
);
System
.
out
.
println
(
context
.
getState
().
toString
());
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/state/StopState.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
state
;
public
class
StopState
implements
State
{
public
void
doAction
(
Context
context
)
{
System
.
out
.
println
(
"Player is in stop state"
);
context
.
setState
(
this
);
}
public
String
toString
()
{
return
"Stop State"
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/strategy/Context.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
strategy
;
public
class
Context
{
private
Strategy
strategy
;
public
Context
()
{}
public
void
SetStrategy
(
Strategy
strategy
)
{
this
.
strategy
=
strategy
;
}
public
int
executeStrategy
(
int
num1
,
int
num2
)
{
return
strategy
.
doOperation
(
num1
,
num2
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/strategy/OperationAdd.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
strategy
;
public
class
OperationAdd
implements
Strategy
{
@Override
public
int
doOperation
(
int
num1
,
int
num2
)
{
return
num1
+
num2
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/strategy/OperationMultiply.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
strategy
;
public
class
OperationMultiply
implements
Strategy
{
@Override
public
int
doOperation
(
int
num1
,
int
num2
)
{
return
num1
*
num2
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/strategy/OperationSubstract.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
strategy
;
public
class
OperationSubstract
implements
Strategy
{
@Override
public
int
doOperation
(
int
num1
,
int
num2
)
{
return
num1
-
num2
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/strategy/Strategy.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
strategy
;
public
interface
Strategy
{
public
int
doOperation
(
int
num1
,
int
num2
);
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/behavioral/strategy/StrategyPatternDemo.java
0 → 100644
View file @
1365e260
package
cn
.
datax
.
learning
.
design
.
patterns
.
behavioral
.
strategy
;
/**
* 策略模式(Strategy Pattern)
*/
public
class
StrategyPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Context
context
=
new
Context
();
context
.
SetStrategy
(
new
OperationAdd
());
System
.
out
.
println
(
"10 + 5 = "
+
context
.
executeStrategy
(
10
,
5
));
context
.
SetStrategy
(
new
OperationSubstract
());
System
.
out
.
println
(
"10 - 5 = "
+
context
.
executeStrategy
(
10
,
5
));
context
.
SetStrategy
(
new
OperationMultiply
());
System
.
out
.
println
(
"10 * 5 = "
+
context
.
executeStrategy
(
10
,
5
));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment