Update README.md
This commit is contained in:
parent
b5fddd469a
commit
e6ddff5f25
@ -9,17 +9,20 @@ tags:
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Also known as
|
## Also known as
|
||||||
|
|
||||||
Policy
|
Policy
|
||||||
|
|
||||||
## Intent
|
## Intent
|
||||||
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary
|
|
||||||
independently from clients that use it.
|
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets
|
||||||
|
the algorithm vary independently from clients that use it.
|
||||||
|
|
||||||
## Explanation
|
## Explanation
|
||||||
|
|
||||||
Real world example
|
Real world example
|
||||||
|
|
||||||
> Slaying dragons is a dangerous profession. With experience it becomes easier. Veteran dragonslayers have developed different fighting strategies against different types of dragons.
|
> Slaying dragons is a dangerous job. With experience it becomes easier. Veteran
|
||||||
|
> dragonslayers have developed different fighting strategies against different types of dragons.
|
||||||
|
|
||||||
In plain words
|
In plain words
|
||||||
|
|
||||||
@ -27,7 +30,8 @@ In plain words
|
|||||||
|
|
||||||
Wikipedia says
|
Wikipedia says
|
||||||
|
|
||||||
> In computer programming, the strategy pattern (also known as the policy pattern) is a behavioral software design pattern that enables selecting an algorithm at runtime.
|
> In computer programming, the strategy pattern (also known as the policy pattern) is a behavioral
|
||||||
|
> software design pattern that enables selecting an algorithm at runtime.
|
||||||
|
|
||||||
**Programmatic Example**
|
**Programmatic Example**
|
||||||
|
|
||||||
@ -71,7 +75,8 @@ public class SpellStrategy implements DragonSlayingStrategy {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
And here is the mighty dragonslayer who is able to pick his fighting strategy based on the opponent.
|
And here is the mighty dragonslayer, who is able to pick his fighting strategy based on the
|
||||||
|
opponent.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class DragonSlayer {
|
public class DragonSlayer {
|
||||||
@ -92,7 +97,7 @@ public class DragonSlayer {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Finally here's dragonslayer in action.
|
Finally here's the dragonslayer in action.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
LOGGER.info("Green dragon spotted ahead!");
|
LOGGER.info("Green dragon spotted ahead!");
|
||||||
@ -104,19 +109,25 @@ Finally here's dragonslayer in action.
|
|||||||
LOGGER.info("Black dragon lands before you.");
|
LOGGER.info("Black dragon lands before you.");
|
||||||
dragonSlayer.changeStrategy(new SpellStrategy());
|
dragonSlayer.changeStrategy(new SpellStrategy());
|
||||||
dragonSlayer.goToBattle();
|
dragonSlayer.goToBattle();
|
||||||
|
```
|
||||||
// Green dragon spotted ahead!
|
|
||||||
// With your Excalibur you sever the dragon's head!
|
Program output:
|
||||||
// Red dragon emerges.
|
|
||||||
// You shoot the dragon with the magical crossbow and it falls dead on the ground!
|
```
|
||||||
// Black dragon lands before you.
|
Green dragon spotted ahead!
|
||||||
// You cast the spell of disintegration and the dragon vaporizes in a pile of dust!
|
With your Excalibur you sever the dragon's head!
|
||||||
|
Red dragon emerges.
|
||||||
|
You shoot the dragon with the magical crossbow and it falls dead on the ground!
|
||||||
|
Black dragon lands before you.
|
||||||
|
You cast the spell of disintegration and the dragon vaporizes in a pile of dust!
|
||||||
```
|
```
|
||||||
|
|
||||||
## Class diagram
|
## Class diagram
|
||||||

|
|
||||||
|

|
||||||
|
|
||||||
## Applicability
|
## Applicability
|
||||||
|
|
||||||
Use the Strategy pattern when
|
Use the Strategy pattern when
|
||||||
|
|
||||||
* Many related classes differ only in their behavior. Strategies provide a way to configure a class either one of many behaviors
|
* Many related classes differ only in their behavior. Strategies provide a way to configure a class either one of many behaviors
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 15 KiB |
@ -1,75 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<class-diagram version="1.1.8" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
|
|
||||||
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
|
|
||||||
<interface id="1" language="java" name="com.iluwatar.strategy.DragonSlayingStrategy" project="strategy"
|
|
||||||
file="/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java" binary="false" corner="BOTTOM_RIGHT">
|
|
||||||
<position height="88" width="186" x="525" y="428"/>
|
|
||||||
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
|
|
||||||
sort-features="false" accessors="true" visibility="true">
|
|
||||||
<attributes public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
<operations public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
</display>
|
|
||||||
</interface>
|
|
||||||
<class id="2" language="java" name="com.iluwatar.strategy.ProjectileStrategy" project="strategy"
|
|
||||||
file="/strategy/src/main/java/com/iluwatar/strategy/ProjectileStrategy.java" binary="false" corner="BOTTOM_RIGHT">
|
|
||||||
<position height="106" width="151" x="218" y="264"/>
|
|
||||||
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
|
|
||||||
sort-features="false" accessors="true" visibility="true">
|
|
||||||
<attributes public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
<operations public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
</display>
|
|
||||||
</class>
|
|
||||||
<class id="3" language="java" name="com.iluwatar.strategy.SpellStrategy" project="strategy"
|
|
||||||
file="/strategy/src/main/java/com/iluwatar/strategy/SpellStrategy.java" binary="false" corner="BOTTOM_RIGHT">
|
|
||||||
<position height="106" width="125" x="409" y="264"/>
|
|
||||||
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
|
|
||||||
sort-features="false" accessors="true" visibility="true">
|
|
||||||
<attributes public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
<operations public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
</display>
|
|
||||||
</class>
|
|
||||||
<class id="4" language="java" name="com.iluwatar.strategy.DragonSlayer" project="strategy"
|
|
||||||
file="/strategy/src/main/java/com/iluwatar/strategy/DragonSlayer.java" binary="false" corner="BOTTOM_RIGHT">
|
|
||||||
<position height="124" width="284" x="574" y="264"/>
|
|
||||||
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
|
|
||||||
sort-features="false" accessors="true" visibility="true">
|
|
||||||
<attributes public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
<operations public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
</display>
|
|
||||||
</class>
|
|
||||||
<class id="5" language="java" name="com.iluwatar.strategy.MeleeStrategy" project="strategy"
|
|
||||||
file="/strategy/src/main/java/com/iluwatar/strategy/MeleeStrategy.java" binary="false" corner="BOTTOM_RIGHT">
|
|
||||||
<position height="106" width="127" x="898" y="264"/>
|
|
||||||
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
|
|
||||||
sort-features="false" accessors="true" visibility="true">
|
|
||||||
<attributes public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
<operations public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
</display>
|
|
||||||
</class>
|
|
||||||
<realization id="6">
|
|
||||||
<end type="SOURCE" refId="5"/>
|
|
||||||
<end type="TARGET" refId="1"/>
|
|
||||||
</realization>
|
|
||||||
<realization id="7">
|
|
||||||
<end type="SOURCE" refId="2"/>
|
|
||||||
<end type="TARGET" refId="1"/>
|
|
||||||
</realization>
|
|
||||||
<realization id="8">
|
|
||||||
<end type="SOURCE" refId="3"/>
|
|
||||||
<end type="TARGET" refId="1"/>
|
|
||||||
</realization>
|
|
||||||
<association id="9">
|
|
||||||
<end type="SOURCE" refId="4" navigable="false">
|
|
||||||
<attribute id="10" name="strategy"/>
|
|
||||||
<multiplicity id="11" minimum="0" maximum="1"/>
|
|
||||||
</end>
|
|
||||||
<end type="TARGET" refId="1" navigable="true"/>
|
|
||||||
<display labels="true" multiplicity="true"/>
|
|
||||||
</association>
|
|
||||||
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
|
|
||||||
sort-features="false" accessors="true" visibility="true">
|
|
||||||
<attributes public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
<operations public="true" package="true" protected="true" private="true" static="true"/>
|
|
||||||
</classifier-display>
|
|
||||||
<association-display labels="true" multiplicity="true"/>
|
|
||||||
</class-diagram>
|
|
Binary file not shown.
Before Width: | Height: | Size: 28 KiB |
BIN
strategy/etc/strategy_urm.png
Normal file
BIN
strategy/etc/strategy_urm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
Loading…
x
Reference in New Issue
Block a user