├── .gitignore ├── README.md ├── src └── patterns │ ├── state │ ├── BrushTool.java │ ├── Canvas.java │ ├── SelectionTool.java │ ├── Tool.java │ └── readme.md │ └── templateMethod │ ├── Employee.java │ ├── Freelancer.java │ └── Worker.java └── tests └── units └── state └── StatePatternTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | ############################## 2 | ## Java 3 | ############################## 4 | .mtj.tmp/ 5 | *.class 6 | *.jar 7 | *.war 8 | *.ear 9 | *.nar 10 | hs_err_pid* 11 | 12 | ############################## 13 | ## Maven 14 | ############################## 15 | target/ 16 | pom.xml.tag 17 | pom.xml.releaseBackup 18 | pom.xml.versionsBackup 19 | pom.xml.next 20 | pom.xml.bak 21 | release.properties 22 | dependency-reduced-pom.xml 23 | buildNumber.properties 24 | .mvn/timing.properties 25 | .mvn/wrapper/maven-wrapper.jar 26 | 27 | ############################## 28 | ## Gradle 29 | ############################## 30 | bin/ 31 | build/ 32 | .gradle 33 | .gradletasknamecache 34 | gradle-app.setting 35 | !gradle-wrapper.jar 36 | 37 | ############################## 38 | ## IntelliJ 39 | ############################## 40 | out/ 41 | .idea/ 42 | .idea_modules/ 43 | *.iml 44 | *.ipr 45 | *.iws 46 | 47 | ############################## 48 | ## Eclipse 49 | ############################## 50 | .settings/ 51 | bin/ 52 | tmp/ 53 | .metadata 54 | .classpath 55 | .project 56 | *.tmp 57 | *.bak 58 | *.swp 59 | *~.nib 60 | local.properties 61 | .loadpath 62 | .factorypath 63 | 64 | ############################## 65 | ## NetBeans 66 | ############################## 67 | nbproject/private/ 68 | build/ 69 | nbbuild/ 70 | dist/ 71 | nbdist/ 72 | nbactions.xml 73 | nb-configuration.xml 74 | 75 | ############################## 76 | ## Visual Studio Code 77 | ############################## 78 | .vscode/ 79 | .code-workspace 80 | 81 | ############################## 82 | ## OS X 83 | ############################## 84 | .DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Design patterns in java 2 | Implementation of the must popular design patterns using JAVA 3 | 4 | 5 | #### Design patterns checklist 6 | | Done ?| Pattern name | 7 | |----|----------------| 8 | | :heavy_check_mark: | State pattern| 9 | | :x: | Template method | 10 | 11 | feautred_repository 12 | -------------------------------------------------------------------------------- /src/patterns/state/BrushTool.java: -------------------------------------------------------------------------------- 1 | package patterns.state; 2 | 3 | public class BrushTool extends Tool 4 | { 5 | @Override 6 | String mouseUp() 7 | { 8 | return "[Brush state]: Brush ICON"; 9 | } 10 | 11 | @Override 12 | String mouseDown() 13 | { 14 | return "[Brush state]: Draw a line"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/patterns/state/Canvas.java: -------------------------------------------------------------------------------- 1 | package patterns.state; 2 | 3 | public class Canvas 4 | { 5 | private Tool currentTool; 6 | 7 | public Tool getCurrentTool() { 8 | return currentTool; 9 | } 10 | 11 | public void setCurrentTool(Tool currentTool) { 12 | this.currentTool = currentTool; 13 | } 14 | 15 | public String mouseUp() 16 | { 17 | return currentTool.mouseUp(); 18 | } 19 | 20 | public String mouseDown() 21 | { 22 | return currentTool.mouseDown(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/patterns/state/SelectionTool.java: -------------------------------------------------------------------------------- 1 | package patterns.state; 2 | 3 | public class SelectionTool extends Tool 4 | { 5 | @Override 6 | String mouseUp() 7 | { 8 | return "[Selection state]: Draw dashed rectangle"; 9 | } 10 | 11 | @Override 12 | String mouseDown() 13 | { 14 | return "[Selection state]: Selection ICON"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/patterns/state/Tool.java: -------------------------------------------------------------------------------- 1 | package patterns.state; 2 | 3 | public abstract class Tool { 4 | 5 | abstract String mouseUp(); 6 | 7 | abstract String mouseDown(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/patterns/state/readme.md: -------------------------------------------------------------------------------- 1 | ## State pattern -------------------------------------------------------------------------------- /src/patterns/templateMethod/Employee.java: -------------------------------------------------------------------------------- 1 | package patterns.templateMethod; 2 | 3 | public class Employee extends Worker { 4 | } 5 | -------------------------------------------------------------------------------- /src/patterns/templateMethod/Freelancer.java: -------------------------------------------------------------------------------- 1 | package patterns.templateMethod; 2 | 3 | public class Freelancer extends Worker { 4 | 5 | 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/patterns/templateMethod/Worker.java: -------------------------------------------------------------------------------- 1 | package patterns.templateMethod; 2 | 3 | public abstract class Worker { 4 | 5 | public double salary() 6 | { 7 | return 10; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /tests/units/state/StatePatternTest.java: -------------------------------------------------------------------------------- 1 | package units.state; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | import patterns.state.BrushTool; 6 | import patterns.state.Canvas; 7 | import patterns.state.SelectionTool; 8 | 9 | public class StatePatternTest extends Assert { 10 | 11 | @Test 12 | public void should_use_selection_tool_state() { 13 | Canvas canvas = new Canvas(); 14 | 15 | // Set Selection tool as Current Tool (state) 16 | canvas.setCurrentTool(new SelectionTool()); 17 | 18 | // Handle mouse up method based on current tool 19 | assertEquals(new String("[Selection state]: Draw dashed rectangle"), canvas.mouseUp()); 20 | 21 | // Handle mouse down method based on current tool 22 | assertEquals(new String("[Selection state]: Selection ICON"), canvas.mouseDown()); 23 | } 24 | 25 | @Test 26 | public void should_use_brush_tool_state() { 27 | Canvas canvas = new Canvas(); 28 | 29 | // Set Brush tool as Current Tool (state) 30 | canvas.setCurrentTool(new BrushTool()); 31 | 32 | // Handle mouse up method based on current tool 33 | assertEquals(new String("[Brush state]: Brush ICON"), canvas.mouseUp()); 34 | 35 | // Handle mouse down method based on current tool 36 | assertEquals(new String("[Brush state]: Draw a line"), canvas.mouseDown()); 37 | } 38 | } 39 | --------------------------------------------------------------------------------