Update README.md
This commit is contained in:
		| @@ -9,17 +9,20 @@ tags: | ||||
| --- | ||||
|  | ||||
| ## Also known as | ||||
|  | ||||
| Policy | ||||
|  | ||||
| ## 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 | ||||
|  | ||||
| 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 | ||||
|  | ||||
| @@ -27,7 +30,8 @@ In plain words | ||||
|  | ||||
| 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** | ||||
|  | ||||
| @@ -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 | ||||
| public class DragonSlayer { | ||||
| @@ -92,7 +97,7 @@ public class DragonSlayer { | ||||
| } | ||||
| ``` | ||||
|  | ||||
| Finally here's dragonslayer in action. | ||||
| Finally here's the dragonslayer in action. | ||||
|  | ||||
| ```java | ||||
|     LOGGER.info("Green dragon spotted ahead!"); | ||||
| @@ -104,19 +109,25 @@ Finally here's dragonslayer in action. | ||||
|     LOGGER.info("Black dragon lands before you."); | ||||
|     dragonSlayer.changeStrategy(new SpellStrategy()); | ||||
|     dragonSlayer.goToBattle(); | ||||
| ``` | ||||
|  | ||||
|     // Green dragon spotted ahead! | ||||
|     // 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!     | ||||
| Program output: | ||||
|  | ||||
| ``` | ||||
|     Green dragon spotted ahead! | ||||
|     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 | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ## Applicability | ||||
|  | ||||
| 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 | ||||
|   | ||||
										
											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