Skip to content

Commit

Permalink
Adding Interface Segregation and Dependency Inversion principles clas…
Browse files Browse the repository at this point in the history
…ses examples
  • Loading branch information
jazzinjars committed Jun 12, 2018
1 parent 65c099b commit 0eb7dc2
Show file tree
Hide file tree
Showing 9 changed files with 104 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ This repository will be the typical one to collect those fundamentals of program
- TDD
- SOLID principles
- Clean Code
- Patterns
- ...
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.jazzinjars.solid.dependency;

public class BackEndDeveloper implements Developer {

@Override
public void develop() {
writeJava();
}

private void writeJava() {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.jazzinjars.solid.dependency;

public interface Developer {

void develop();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.jazzinjars.solid.dependency;

public class FrontEndDeveloper implements Developer {

@Override
public void develop() {
writeJavaScript();
}

private void writeJavaScript() {

}
}
31 changes: 31 additions & 0 deletions solid/src/main/java/com/jazzinjars/solid/dependency/Project.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.jazzinjars.solid.dependency;

import java.util.List;

public class Project {

private List<Developer> developers;

// So as we can see the Project class is a high level module and it depends on low level modules
// such as BackEndDeveloper and FrontEndDeveloper. We are actually violating the first part of
// the dependency inversion principle.
// ------>
private BackEndDeveloper backEndDeveloper = new BackEndDeveloper();
private FrontEndDeveloper frontEndDeveloper = new FrontEndDeveloper();

public void implementNoPrinciple() {
// backEndDeveloper.writeJava();
// frontEndDeveloper.writeJavaScript();
}
// ------>

public Project(List<Developer> developers) {
this.developers = developers;
}

public void implement() {
developers.forEach(d -> d.develop());
}
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.jazzinjars.solid.interfacesegregation;

public interface Athlete {

void compete();

// void swim();

// void highJump();

// void longJump();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.jazzinjars.solid.interfacesegregation;

public class JohnSmith implements SwimmingAthlete {

@Override
public void compete() {
System.out.println("John Smith started competing");
}

@Override
public void swim() {
System.out.println("John Smith started swimming");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.jazzinjars.solid.interfacesegregation;

public interface JumpingAthlete extends Athlete {

void highJump();

void longJump();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.jazzinjars.solid.interfacesegregation;

public interface SwimmingAthlete extends Athlete {

void swim();
}

0 comments on commit 0eb7dc2

Please sign in to comment.