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
e183bd2c
Commit
e183bd2c
authored
Mar 06, 2020
by
yuwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Java设计模式
parent
a3ac3e3d
Hide whitespace changes
Inline
Side-by-side
Showing
43 changed files
with
737 additions
and
0 deletions
+737
-0
AdapterPatternDemo.java
...esign/patterns/structural/adapter/AdapterPatternDemo.java
+16
-0
AdvancedMediaPlayer.java
...sign/patterns/structural/adapter/AdvancedMediaPlayer.java
+8
-0
AudioPlayer.java
...rning/design/patterns/structural/adapter/AudioPlayer.java
+23
-0
MediaAdapter.java
...ning/design/patterns/structural/adapter/MediaAdapter.java
+23
-0
MediaPlayer.java
...rning/design/patterns/structural/adapter/MediaPlayer.java
+6
-0
Mp4Player.java
...earning/design/patterns/structural/adapter/Mp4Player.java
+14
-0
VlcPlayer.java
...earning/design/patterns/structural/adapter/VlcPlayer.java
+14
-0
BridgePatternDemo.java
.../design/patterns/structural/bridge/BridgePatternDemo.java
+15
-0
Circle.java
...ax/learning/design/patterns/structural/bridge/Circle.java
+18
-0
DrawApi.java
...x/learning/design/patterns/structural/bridge/DrawApi.java
+6
-0
GreenCircle.java
...arning/design/patterns/structural/bridge/GreenCircle.java
+10
-0
RedCircle.java
...learning/design/patterns/structural/bridge/RedCircle.java
+10
-0
Shape.java
...tax/learning/design/patterns/structural/bridge/Shape.java
+12
-0
CompositePatternDemo.java
...n/patterns/structural/composite/CompositePatternDemo.java
+39
-0
Employee.java
...arning/design/patterns/structural/composite/Employee.java
+38
-0
AndCriteria.java
...ning/design/patterns/structural/criteria/AndCriteria.java
+20
-0
Criteria.java
...earning/design/patterns/structural/criteria/Criteria.java
+8
-0
CriteriaFemale.java
...g/design/patterns/structural/criteria/CriteriaFemale.java
+18
-0
CriteriaMale.java
...ing/design/patterns/structural/criteria/CriteriaMale.java
+18
-0
CriteriaPatternDemo.java
...ign/patterns/structural/criteria/CriteriaPatternDemo.java
+48
-0
CriteriaSingle.java
...g/design/patterns/structural/criteria/CriteriaSingle.java
+18
-0
OrCriteria.java
...rning/design/patterns/structural/criteria/OrCriteria.java
+27
-0
Person.java
.../learning/design/patterns/structural/criteria/Person.java
+26
-0
Circle.java
...learning/design/patterns/structural/decorator/Circle.java
+9
-0
DecoratorPatternDemo.java
...n/patterns/structural/decorator/DecoratorPatternDemo.java
+22
-0
Rectangle.java
...rning/design/patterns/structural/decorator/Rectangle.java
+9
-0
RedShapeDecorator.java
...sign/patterns/structural/decorator/RedShapeDecorator.java
+18
-0
Shape.java
.../learning/design/patterns/structural/decorator/Shape.java
+6
-0
ShapeDecorator.java
.../design/patterns/structural/decorator/ShapeDecorator.java
+14
-0
Circle.java
...ax/learning/design/patterns/structural/facade/Circle.java
+9
-0
FacadePatternDemo.java
.../design/patterns/structural/facade/FacadePatternDemo.java
+15
-0
Rectangle.java
...learning/design/patterns/structural/facade/Rectangle.java
+9
-0
Shape.java
...tax/learning/design/patterns/structural/facade/Shape.java
+6
-0
ShapeMaker.java
...earning/design/patterns/structural/facade/ShapeMaker.java
+26
-0
Square.java
...ax/learning/design/patterns/structural/facade/Square.java
+9
-0
Circle.java
...learning/design/patterns/structural/flyweight/Circle.java
+34
-0
FlyweightPatternDemo.java
...n/patterns/structural/flyweight/FlyweightPatternDemo.java
+30
-0
Shape.java
.../learning/design/patterns/structural/flyweight/Shape.java
+6
-0
ShapeFactory.java
...ng/design/patterns/structural/flyweight/ShapeFactory.java
+19
-0
Image.java
...atax/learning/design/patterns/structural/proxy/Image.java
+6
-0
ProxyImage.java
...learning/design/patterns/structural/proxy/ProxyImage.java
+19
-0
ProxyPatternDemo.java
...ng/design/patterns/structural/proxy/ProxyPatternDemo.java
+16
-0
RealImage.java
.../learning/design/patterns/structural/proxy/RealImage.java
+20
-0
No files found.
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/adapter/AdapterPatternDemo.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
adapter
;
/**
* 适配器模式(Adapter Pattern)
*/
public
class
AdapterPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
AudioPlayer
audioPlayer
=
new
AudioPlayer
();
audioPlayer
.
play
(
"mp3"
,
"beyond the horizon.mp3"
);
audioPlayer
.
play
(
"mp4"
,
"alone.mp4"
);
audioPlayer
.
play
(
"vlc"
,
"far far away.vlc"
);
audioPlayer
.
play
(
"avi"
,
"mind me.avi"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/adapter/AdvancedMediaPlayer.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
adapter
;
public
interface
AdvancedMediaPlayer
{
public
void
playVlc
(
String
fileName
);
public
void
playMp4
(
String
fileName
);
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/adapter/AudioPlayer.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
adapter
;
public
class
AudioPlayer
implements
MediaPlayer
{
MediaAdapter
mediaAdapter
;
@Override
public
void
play
(
String
audioType
,
String
fileName
)
{
//播放 mp3 音乐文件的内置支持
if
(
audioType
.
equalsIgnoreCase
(
"mp3"
))
{
System
.
out
.
println
(
"Playing mp3 file. Name: "
+
fileName
);
}
//mediaAdapter 提供了播放其他文件格式的支持
else
if
(
audioType
.
equalsIgnoreCase
(
"vlc"
)
||
audioType
.
equalsIgnoreCase
(
"mp4"
))
{
mediaAdapter
=
new
MediaAdapter
(
audioType
);
mediaAdapter
.
play
(
audioType
,
fileName
);
}
else
{
System
.
out
.
println
(
"Invalid media. "
+
audioType
+
" format not supported"
);
}
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/adapter/MediaAdapter.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
adapter
;
public
class
MediaAdapter
implements
MediaPlayer
{
AdvancedMediaPlayer
advancedMusicPlayer
;
public
MediaAdapter
(
String
audioType
)
{
if
(
audioType
.
equalsIgnoreCase
(
"vlc"
)
)
{
advancedMusicPlayer
=
new
VlcPlayer
();
}
else
if
(
audioType
.
equalsIgnoreCase
(
"mp4"
))
{
advancedMusicPlayer
=
new
Mp4Player
();
}
}
@Override
public
void
play
(
String
audioType
,
String
fileName
)
{
if
(
audioType
.
equalsIgnoreCase
(
"vlc"
))
{
advancedMusicPlayer
.
playVlc
(
fileName
);
}
else
if
(
audioType
.
equalsIgnoreCase
(
"mp4"
))
{
advancedMusicPlayer
.
playMp4
(
fileName
);
}
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/adapter/MediaPlayer.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
adapter
;
public
interface
MediaPlayer
{
public
void
play
(
String
audioType
,
String
fileName
);
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/adapter/Mp4Player.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
adapter
;
public
class
Mp4Player
implements
AdvancedMediaPlayer
{
@Override
public
void
playVlc
(
String
fileName
)
{
//什么也不做
}
@Override
public
void
playMp4
(
String
fileName
)
{
System
.
out
.
println
(
"Playing mp4 file. Name: "
+
fileName
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/adapter/VlcPlayer.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
adapter
;
public
class
VlcPlayer
implements
AdvancedMediaPlayer
{
@Override
public
void
playVlc
(
String
fileName
)
{
System
.
out
.
println
(
"Playing vlc file. Name: "
+
fileName
);
}
@Override
public
void
playMp4
(
String
fileName
)
{
//什么也不做
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/bridge/BridgePatternDemo.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
bridge
;
/**
* 桥接模式(Bridge Pattern)
*/
public
class
BridgePatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Shape
redCircle
=
new
Circle
(
100
,
100
,
10
,
new
RedCircle
());
Shape
greenCircle
=
new
Circle
(
100
,
100
,
10
,
new
GreenCircle
());
redCircle
.
draw
();
greenCircle
.
draw
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/bridge/Circle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
bridge
;
public
class
Circle
extends
Shape
{
private
int
x
,
y
,
radius
;
public
Circle
(
int
x
,
int
y
,
int
radius
,
DrawApi
drawApi
)
{
super
(
drawApi
);
this
.
x
=
x
;
this
.
y
=
y
;
this
.
radius
=
radius
;
}
@Override
public
void
draw
()
{
drawApi
.
drawCircle
(
radius
,
x
,
y
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/bridge/DrawApi.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
bridge
;
public
interface
DrawApi
{
public
void
drawCircle
(
int
radius
,
int
x
,
int
y
);
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/bridge/GreenCircle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
bridge
;
public
class
GreenCircle
implements
DrawApi
{
@Override
public
void
drawCircle
(
int
radius
,
int
x
,
int
y
)
{
System
.
out
.
println
(
"Drawing Circle[ color: green, radius: "
+
radius
+
", x: "
+
x
+
", "
+
y
+
"]"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/bridge/RedCircle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
bridge
;
public
class
RedCircle
implements
DrawApi
{
@Override
public
void
drawCircle
(
int
radius
,
int
x
,
int
y
)
{
System
.
out
.
println
(
"Drawing Circle[ color: red, radius: "
+
radius
+
", x: "
+
x
+
", "
+
y
+
"]"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/bridge/Shape.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
bridge
;
public
abstract
class
Shape
{
protected
DrawApi
drawApi
;
protected
Shape
(
DrawApi
drawApi
)
{
this
.
drawApi
=
drawApi
;
}
public
abstract
void
draw
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/composite/CompositePatternDemo.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
composite
;
/**
* 组合模式(Composite Pattern)
*/
public
class
CompositePatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Employee
CEO
=
new
Employee
(
"John"
,
"CEO"
,
30000
);
Employee
headSales
=
new
Employee
(
"Robert"
,
"Head Sales"
,
20000
);
Employee
headMarketing
=
new
Employee
(
"Michel"
,
"Head Marketing"
,
20000
);
Employee
clerk1
=
new
Employee
(
"Laura"
,
"Marketing"
,
10000
);
Employee
clerk2
=
new
Employee
(
"Bob"
,
"Marketing"
,
10000
);
Employee
salesExecutive1
=
new
Employee
(
"Richard"
,
"Sales"
,
10000
);
Employee
salesExecutive2
=
new
Employee
(
"Rob"
,
"Sales"
,
10000
);
CEO
.
add
(
headSales
);
CEO
.
add
(
headMarketing
);
headSales
.
add
(
salesExecutive1
);
headSales
.
add
(
salesExecutive2
);
headMarketing
.
add
(
clerk1
);
headMarketing
.
add
(
clerk2
);
//打印该组织的所有员工
System
.
out
.
println
(
CEO
);
for
(
Employee
headEmployee
:
CEO
.
getSubordinates
())
{
System
.
out
.
println
(
headEmployee
);
for
(
Employee
employee
:
headEmployee
.
getSubordinates
())
{
System
.
out
.
println
(
employee
);
}
}
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/composite/Employee.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
composite
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
Employee
{
private
String
name
;
private
String
dept
;
private
int
salary
;
private
List
<
Employee
>
subordinates
;
//构造函数
public
Employee
(
String
name
,
String
dept
,
int
sal
)
{
this
.
name
=
name
;
this
.
dept
=
dept
;
this
.
salary
=
sal
;
subordinates
=
new
ArrayList
<
Employee
>();
}
public
void
add
(
Employee
e
)
{
subordinates
.
add
(
e
);
}
public
void
remove
(
Employee
e
)
{
subordinates
.
remove
(
e
);
}
public
List
<
Employee
>
getSubordinates
()
{
return
subordinates
;
}
public
String
toString
()
{
return
(
"Employee :[ Name : "
+
name
+
", dept : "
+
dept
+
", salary :"
+
salary
+
" ]"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/criteria/AndCriteria.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
criteria
;
import
java.util.List
;
public
class
AndCriteria
implements
Criteria
{
private
Criteria
criteria
;
private
Criteria
otherCriteria
;
public
AndCriteria
(
Criteria
criteria
,
Criteria
otherCriteria
)
{
this
.
criteria
=
criteria
;
this
.
otherCriteria
=
otherCriteria
;
}
@Override
public
List
<
Person
>
meetCriteria
(
List
<
Person
>
persons
)
{
List
<
Person
>
firstCriteriaPersons
=
criteria
.
meetCriteria
(
persons
);
return
otherCriteria
.
meetCriteria
(
firstCriteriaPersons
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/criteria/Criteria.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
criteria
;
import
java.util.List
;
public
interface
Criteria
{
public
List
<
Person
>
meetCriteria
(
List
<
Person
>
persons
);
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/criteria/CriteriaFemale.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
criteria
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
CriteriaFemale
implements
Criteria
{
@Override
public
List
<
Person
>
meetCriteria
(
List
<
Person
>
persons
)
{
List
<
Person
>
femalePersons
=
new
ArrayList
<
Person
>();
for
(
Person
person
:
persons
)
{
if
(
person
.
getGender
().
equalsIgnoreCase
(
"FEMALE"
))
{
femalePersons
.
add
(
person
);
}
}
return
femalePersons
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/criteria/CriteriaMale.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
criteria
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
CriteriaMale
implements
Criteria
{
@Override
public
List
<
Person
>
meetCriteria
(
List
<
Person
>
persons
)
{
List
<
Person
>
malePersons
=
new
ArrayList
<
Person
>();
for
(
Person
person
:
persons
)
{
if
(
person
.
getGender
().
equalsIgnoreCase
(
"MALE"
))
{
malePersons
.
add
(
person
);
}
}
return
malePersons
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/criteria/CriteriaPatternDemo.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
criteria
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 过滤器模式(Filter、Criteria Pattern)
*/
public
class
CriteriaPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
List
<
Person
>
persons
=
new
ArrayList
<
Person
>();
persons
.
add
(
new
Person
(
"Robert"
,
"Male"
,
"Single"
));
persons
.
add
(
new
Person
(
"John"
,
"Male"
,
"Married"
));
persons
.
add
(
new
Person
(
"Laura"
,
"Female"
,
"Married"
));
persons
.
add
(
new
Person
(
"Diana"
,
"Female"
,
"Single"
));
persons
.
add
(
new
Person
(
"Mike"
,
"Male"
,
"Single"
));
persons
.
add
(
new
Person
(
"Bobby"
,
"Male"
,
"Single"
));
Criteria
male
=
new
CriteriaMale
();
Criteria
female
=
new
CriteriaFemale
();
Criteria
single
=
new
CriteriaSingle
();
Criteria
singleMale
=
new
AndCriteria
(
single
,
male
);
Criteria
singleOrFemale
=
new
OrCriteria
(
single
,
female
);
System
.
out
.
println
(
"Males: "
);
printPersons
(
male
.
meetCriteria
(
persons
));
System
.
out
.
println
(
"\nFemales: "
);
printPersons
(
female
.
meetCriteria
(
persons
));
System
.
out
.
println
(
"\nSingle Males: "
);
printPersons
(
singleMale
.
meetCriteria
(
persons
));
System
.
out
.
println
(
"\nSingle Or Females: "
);
printPersons
(
singleOrFemale
.
meetCriteria
(
persons
));
}
public
static
void
printPersons
(
List
<
Person
>
persons
){
for
(
Person
person
:
persons
)
{
System
.
out
.
println
(
"Person : [ Name : "
+
person
.
getName
()
+
", Gender : "
+
person
.
getGender
()
+
", Marital Status : "
+
person
.
getMaritalStatus
()
+
" ]"
);
}
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/criteria/CriteriaSingle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
criteria
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
CriteriaSingle
implements
Criteria
{
@Override
public
List
<
Person
>
meetCriteria
(
List
<
Person
>
persons
)
{
List
<
Person
>
singlePersons
=
new
ArrayList
<
Person
>();
for
(
Person
person
:
persons
)
{
if
(
person
.
getMaritalStatus
().
equalsIgnoreCase
(
"SINGLE"
))
{
singlePersons
.
add
(
person
);
}
}
return
singlePersons
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/criteria/OrCriteria.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
criteria
;
import
java.util.List
;
public
class
OrCriteria
implements
Criteria
{
private
Criteria
criteria
;
private
Criteria
otherCriteria
;
public
OrCriteria
(
Criteria
criteria
,
Criteria
otherCriteria
)
{
this
.
criteria
=
criteria
;
this
.
otherCriteria
=
otherCriteria
;
}
@Override
public
List
<
Person
>
meetCriteria
(
List
<
Person
>
persons
)
{
List
<
Person
>
firstCriteriaItems
=
criteria
.
meetCriteria
(
persons
);
List
<
Person
>
otherCriteriaItems
=
otherCriteria
.
meetCriteria
(
persons
);
for
(
Person
person
:
otherCriteriaItems
)
{
if
(!
firstCriteriaItems
.
contains
(
person
))
{
firstCriteriaItems
.
add
(
person
);
}
}
return
firstCriteriaItems
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/criteria/Person.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
criteria
;
public
class
Person
{
private
String
name
;
private
String
gender
;
private
String
maritalStatus
;
public
Person
(
String
name
,
String
gender
,
String
maritalStatus
)
{
this
.
name
=
name
;
this
.
gender
=
gender
;
this
.
maritalStatus
=
maritalStatus
;
}
public
String
getName
()
{
return
name
;
}
public
String
getGender
()
{
return
gender
;
}
public
String
getMaritalStatus
()
{
return
maritalStatus
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/decorator/Circle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
decorator
;
public
class
Circle
implements
Shape
{
@Override
public
void
draw
()
{
System
.
out
.
println
(
"Shape: Circle"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/decorator/DecoratorPatternDemo.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
decorator
;
/**
* 装饰器模式(Decorator Pattern)
*/
public
class
DecoratorPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Shape
circle
=
new
Circle
();
ShapeDecorator
redCircle
=
new
RedShapeDecorator
(
new
Circle
());
ShapeDecorator
redRectangle
=
new
RedShapeDecorator
(
new
Rectangle
());
System
.
out
.
println
(
"Circle with normal border"
);
circle
.
draw
();
System
.
out
.
println
(
"\nCircle of red border"
);
redCircle
.
draw
();
System
.
out
.
println
(
"\nRectangle of red border"
);
redRectangle
.
draw
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/decorator/Rectangle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
decorator
;
public
class
Rectangle
implements
Shape
{
@Override
public
void
draw
()
{
System
.
out
.
println
(
"Shape: Rectangle"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/decorator/RedShapeDecorator.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
decorator
;
public
class
RedShapeDecorator
extends
ShapeDecorator
{
public
RedShapeDecorator
(
Shape
decoratedShape
)
{
super
(
decoratedShape
);
}
@Override
public
void
draw
()
{
decoratedShape
.
draw
();
setRedBorder
(
decoratedShape
);
}
private
void
setRedBorder
(
Shape
decoratedShape
)
{
System
.
out
.
println
(
"Border Color: Red"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/decorator/Shape.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
decorator
;
public
interface
Shape
{
void
draw
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/decorator/ShapeDecorator.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
decorator
;
public
abstract
class
ShapeDecorator
implements
Shape
{
protected
Shape
decoratedShape
;
public
ShapeDecorator
(
Shape
decoratedShape
)
{
this
.
decoratedShape
=
decoratedShape
;
}
public
void
draw
()
{
decoratedShape
.
draw
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/facade/Circle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
facade
;
public
class
Circle
implements
Shape
{
@Override
public
void
draw
()
{
System
.
out
.
println
(
"Circle::draw()"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/facade/FacadePatternDemo.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
facade
;
/**
* 外观模式(Facade Pattern)
*/
public
class
FacadePatternDemo
{
public
static
void
main
(
String
[]
args
)
{
ShapeMaker
shapeMaker
=
new
ShapeMaker
();
shapeMaker
.
drawCircle
();
shapeMaker
.
drawRectangle
();
shapeMaker
.
drawSquare
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/facade/Rectangle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
facade
;
public
class
Rectangle
implements
Shape
{
@Override
public
void
draw
()
{
System
.
out
.
println
(
"Rectangle::draw()"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/facade/Shape.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
facade
;
public
interface
Shape
{
void
draw
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/facade/ShapeMaker.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
facade
;
public
class
ShapeMaker
{
private
Shape
circle
;
private
Shape
rectangle
;
private
Shape
square
;
public
ShapeMaker
()
{
circle
=
new
Circle
();
rectangle
=
new
Rectangle
();
square
=
new
Square
();
}
public
void
drawCircle
()
{
circle
.
draw
();
}
public
void
drawRectangle
()
{
rectangle
.
draw
();
}
public
void
drawSquare
()
{
square
.
draw
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/facade/Square.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
facade
;
public
class
Square
implements
Shape
{
@Override
public
void
draw
()
{
System
.
out
.
println
(
"Square::draw()"
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/flyweight/Circle.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
flyweight
;
public
class
Circle
implements
Shape
{
private
String
color
;
private
int
x
;
private
int
y
;
private
int
radius
;
public
Circle
(
String
color
)
{
this
.
color
=
color
;
}
public
void
setX
(
int
x
)
{
this
.
x
=
x
;
}
public
void
setY
(
int
y
)
{
this
.
y
=
y
;
}
public
void
setRadius
(
int
radius
)
{
this
.
radius
=
radius
;
}
@Override
public
void
draw
()
{
System
.
out
.
println
(
"Circle: Draw() [Color : "
+
color
+
", x : "
+
x
+
", y :"
+
y
+
", radius :"
+
radius
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/flyweight/FlyweightPatternDemo.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
flyweight
;
/**
* 享元模式(Flyweight Pattern)
*/
public
class
FlyweightPatternDemo
{
private
static
final
String
colors
[]
=
{
"Red"
,
"Green"
,
"Blue"
,
"White"
,
"Black"
};
public
static
void
main
(
String
[]
args
)
{
for
(
int
i
=
0
;
i
<
20
;
++
i
)
{
Circle
circle
=
(
Circle
)
ShapeFactory
.
getCircle
(
getRandomColor
());
circle
.
setX
(
getRandomX
());
circle
.
setY
(
getRandomY
());
circle
.
setRadius
(
100
);
circle
.
draw
();
}
}
private
static
String
getRandomColor
()
{
return
colors
[(
int
)(
Math
.
random
()*
colors
.
length
)];
}
private
static
int
getRandomX
()
{
return
(
int
)(
Math
.
random
()*
100
);
}
private
static
int
getRandomY
()
{
return
(
int
)(
Math
.
random
()*
100
);
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/flyweight/Shape.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
flyweight
;
public
interface
Shape
{
void
draw
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/flyweight/ShapeFactory.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
flyweight
;
import
java.util.concurrent.ConcurrentHashMap
;
public
class
ShapeFactory
{
private
static
final
ConcurrentHashMap
<
String
,
Shape
>
circleMap
=
new
ConcurrentHashMap
<>();
public
static
Shape
getCircle
(
String
color
)
{
Circle
circle
=
(
Circle
)
circleMap
.
get
(
color
);
if
(
circle
==
null
)
{
circle
=
new
Circle
(
color
);
circleMap
.
put
(
color
,
circle
);
System
.
out
.
println
(
"Creating circle of color : "
+
color
);
}
return
circle
;
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/proxy/Image.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
proxy
;
public
interface
Image
{
void
display
();
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/proxy/ProxyImage.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
proxy
;
public
class
ProxyImage
implements
Image
{
private
RealImage
realImage
;
private
String
fileName
;
public
ProxyImage
(
String
fileName
)
{
this
.
fileName
=
fileName
;
}
@Override
public
void
display
()
{
if
(
realImage
==
null
)
{
realImage
=
new
RealImage
(
fileName
);
}
realImage
.
display
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/proxy/ProxyPatternDemo.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
proxy
;
/**
* 代理模式(Proxy Pattern)
*/
public
class
ProxyPatternDemo
{
public
static
void
main
(
String
[]
args
)
{
Image
image
=
new
ProxyImage
(
"test_10mb.jpg"
);
// 图像将从磁盘加载
image
.
display
();
// 图像不需要从磁盘加载
image
.
display
();
}
}
datax-learning/design-patterns/src/main/java/cn/datax/learning/design/patterns/structural/proxy/RealImage.java
0 → 100644
View file @
e183bd2c
package
cn
.
datax
.
learning
.
design
.
patterns
.
structural
.
proxy
;
public
class
RealImage
implements
Image
{
private
String
fileName
;
public
RealImage
(
String
fileName
)
{
this
.
fileName
=
fileName
;
loadFromDisk
(
fileName
);
}
@Override
public
void
display
()
{
System
.
out
.
println
(
"Displaying "
+
fileName
);
}
private
void
loadFromDisk
(
String
fileName
)
{
System
.
out
.
println
(
"Loading "
+
fileName
);
}
}
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