Update README.md
This commit is contained in:
		| @@ -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 | 
		Reference in New Issue
	
	Block a user