├── README.md
└── src
└── com
└── github
└── bsferreira
└── solid
├── dip
├── dip_solution.uml
├── dip_violation.uml
├── solution
│ ├── Driver.java
│ ├── RacingCar.java
│ └── Vehicle.java
└── violation
│ ├── Pilot.java
│ └── RacingCar.java
├── isp
├── isp_solution.uml
├── isp_violation.uml
├── solution
│ ├── CameraSwitch.java
│ ├── Car.java
│ ├── Drone.java
│ ├── EngineSwitch.java
│ ├── RadioSwitch.java
│ └── Vehicle.java
└── violation
│ ├── Car.java
│ ├── Drone.java
│ ├── Switches.java
│ └── Vehicle.java
├── lsp
├── lsp_solution.uml
├── lsp_violation.uml
├── solution
│ ├── Car.java
│ ├── Gear.java
│ ├── Plane.java
│ └── Vehicle.java
└── violation
│ ├── Car.java
│ ├── Gear.java
│ ├── Plane.java
│ └── Vehicle.java
├── ocp
├── ocp_solution.uml
├── ocp_violation.uml
├── solution
│ ├── Comfort.java
│ ├── DrivingMode.java
│ ├── Economy.java
│ ├── EventHandler.java
│ ├── Sport.java
│ └── Vehicle.java
└── violation
│ ├── DrivingMode.java
│ ├── EventHandler.java
│ └── Vehicle.java
└── srp
├── solution
├── FuelPump.java
└── Vehicle.java
├── srp_solution.uml
├── srp_violation.uml
└── violation
└── Vehicle.java
/README.md:
--------------------------------------------------------------------------------
1 | # S.O.L.I.D Principles (java examples)
2 |
3 | * **Single responsibility principle** - A class should have only one reason to change.
4 |
5 | * **Open/Closed principle - Software** entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.
6 |
7 | * **Liskov Substitution Principle** - Child classes should never break the parent class type definitions.
8 |
9 | * **Interface Segregation Principle** - No client should be forced to depend on methods it does not use.
10 |
11 | * **Dependency inversion principle** - High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
12 |
13 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/dip/dip_solution.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.dip.solution
5 |
6 | com.github.bsferreira.solid.dip.solution.Vehicle
7 | com.github.bsferreira.solid.dip.solution.RacingCar
8 | com.github.bsferreira.solid.dip.solution.Driver
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | com.github.bsferreira.solid.dip.solution.RacingCar
24 |
25 |
26 | All
27 | private
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/dip/dip_violation.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.dip.violation
5 |
6 | com.github.bsferreira.solid.dip.violation.RacingCar
7 | com.github.bsferreira.solid.dip.violation.Pilot
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | All
20 | private
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/dip/solution/Driver.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.dip.solution;
2 |
3 | /**
4 | * Created by bsferreira on 17-04-2016.
5 | */
6 | public class Driver {
7 |
8 | private Vehicle vehicle;
9 |
10 | public Driver(final Vehicle vehicle){
11 | this.vehicle = vehicle;
12 | }
13 |
14 | public void increaseSpeed(){
15 | vehicle.accelerate();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/dip/solution/RacingCar.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.dip.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class RacingCar implements Vehicle{
7 |
8 | private final int maxFuel;
9 | private int remainingFuel;
10 | private int power;
11 |
12 | public RacingCar(final int maxFuel) {
13 | this.maxFuel = maxFuel;
14 | remainingFuel = maxFuel;
15 | }
16 |
17 | @Override
18 | public void accelerate() {
19 | power++;
20 | remainingFuel--;
21 | }
22 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/dip/solution/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.dip.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public interface Vehicle {
7 |
8 | void accelerate();
9 |
10 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/dip/violation/Pilot.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.dip.violation;
2 |
3 | /**
4 | * Created by bsferreira on 17-04-2016.
5 | */
6 | public class Pilot {
7 |
8 | private RacingCar vehicle;
9 |
10 | public Pilot(){
11 | this.vehicle = new RacingCar(100);
12 | }
13 |
14 | public void increaseSpeed(){
15 | vehicle.accelerate();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/dip/violation/RacingCar.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.dip.violation;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class RacingCar {
7 |
8 | private final int maxFuel;
9 | private int remainingFuel;
10 | private int power;
11 |
12 | public RacingCar(final int maxFuel) {
13 | this.maxFuel = maxFuel;
14 | remainingFuel = maxFuel;
15 | }
16 |
17 | public void accelerate(){
18 | power++;
19 | remainingFuel--;
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/isp_solution.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.isp.solution
5 |
6 | com.github.bsferreira.solid.isp.solution.Drone
7 | com.github.bsferreira.solid.isp.solution.RadioSwitch
8 | com.github.bsferreira.solid.isp.solution.Vehicle
9 | com.github.bsferreira.solid.isp.solution.Car
10 | com.github.bsferreira.solid.isp.solution.EngineSwitch
11 | com.github.bsferreira.solid.isp.solution.CameraSwitch
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | All
48 | private
49 |
50 |
51 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/isp_violation.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.isp.violation
5 |
6 | com.github.bsferreira.solid.isp.violation.Switches
7 | com.github.bsferreira.solid.isp.violation.Car
8 | com.github.bsferreira.solid.isp.violation.Drone
9 | com.github.bsferreira.solid.isp.violation.Vehicle
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | All
34 | private
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/solution/CameraSwitch.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public interface CameraSwitch {
7 |
8 | void turnCameraOn();
9 |
10 | void turnCameraOff();
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/solution/Car.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Car extends Vehicle implements RadioSwitch {
7 |
8 | private boolean radioOn;
9 |
10 | public boolean isRadioOn() {
11 | return radioOn;
12 | }
13 |
14 | @Override
15 | public void turnRadioOn() {
16 | radioOn = true;
17 | }
18 |
19 | @Override
20 | public void turnRadioOff() {
21 | radioOn = false;
22 | }
23 |
24 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/solution/Drone.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Drone extends Vehicle implements CameraSwitch {
7 |
8 | private boolean cameraOn;
9 |
10 | public boolean isCameraOn() {
11 | return cameraOn;
12 | }
13 |
14 | @Override
15 | public void turnCameraOn() {
16 | cameraOn = true;
17 | }
18 |
19 | @Override
20 | public void turnCameraOff() {
21 | cameraOn = false;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/solution/EngineSwitch.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public interface EngineSwitch {
7 |
8 | void startEngine();
9 |
10 | void shutDownEngine();
11 |
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/solution/RadioSwitch.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public interface RadioSwitch {
7 |
8 | void turnRadioOn();
9 |
10 | void turnRadioOff();
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/solution/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public abstract class Vehicle implements EngineSwitch {
7 |
8 | private boolean engineRunning;
9 |
10 | public boolean isEngineRunning() {
11 | return engineRunning;
12 | }
13 |
14 | @Override
15 | public void startEngine() {
16 | engineRunning = true;
17 | }
18 |
19 | @Override
20 | public void shutDownEngine() {
21 | engineRunning = false;
22 | }
23 |
24 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/violation/Car.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Car extends Vehicle {
7 |
8 | private boolean radioOn;
9 |
10 | public boolean isRadioOn() {
11 | return radioOn;
12 | }
13 |
14 | @Override
15 | public void turnRadioOn() {
16 | radioOn = true;
17 | }
18 |
19 | @Override
20 | public void turnRadioOff() {
21 | radioOn = false;
22 | }
23 |
24 | @Override
25 | public void turnCameraOn() {
26 | // nothing to do here
27 | }
28 |
29 | @Override
30 | public void turnCameraOff() {
31 | // nothing to do here
32 | }
33 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/violation/Drone.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Drone extends Vehicle {
7 |
8 | private boolean cameraOn;
9 |
10 | public boolean isCameraOn() {
11 | return cameraOn;
12 | }
13 |
14 | @Override
15 | public void turnCameraOn() {
16 | cameraOn = true;
17 | }
18 |
19 | @Override
20 | public void turnCameraOff() {
21 | cameraOn = false;
22 | }
23 |
24 | @Override
25 | public void turnRadioOn() {
26 | // nothing to do here
27 | }
28 |
29 | @Override
30 | public void turnRadioOff() {
31 | // nothing to do here
32 | }
33 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/violation/Switches.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public interface Switches {
7 |
8 | void startEngine();
9 |
10 | void shutDownEngine();
11 |
12 | void turnRadioOn();
13 |
14 | void turnRadioOff();
15 |
16 | void turnCameraOn();
17 |
18 | void turnCameraOff();
19 | }
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/isp/violation/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.isp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public abstract class Vehicle implements Switches {
7 |
8 | private boolean engineRunning;
9 |
10 | public boolean isEngineRunning() {
11 | return engineRunning;
12 | }
13 |
14 | @Override
15 | public void startEngine() {
16 | engineRunning = true;
17 | }
18 |
19 | @Override
20 | public void shutDownEngine() {
21 | engineRunning = false;
22 | }
23 |
24 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/lsp_solution.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.lsp.solution
5 |
6 | com.github.bsferreira.solid.lsp.solution.Car
7 | com.github.bsferreira.solid.lsp.solution.Vehicle
8 | com.github.bsferreira.solid.lsp.solution.Plane
9 | com.github.bsferreira.solid.lsp.solution.Gear
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | All
34 | private
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/lsp_violation.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.lsp.violation
5 |
6 | com.github.bsferreira.solid.lsp.violation.Gear
7 | com.github.bsferreira.solid.lsp.violation.Plane
8 | com.github.bsferreira.solid.lsp.violation.Car
9 | com.github.bsferreira.solid.lsp.violation.Vehicle
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | All
34 | private
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/solution/Car.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.lsp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class Car extends Vehicle {
7 |
8 | @Override
9 | public void changeGear(Gear gear) {
10 | Gear actualGear = getGear();
11 | if (isMovingForwards(gear, actualGear)
12 | || isMovingBackwards(gear, actualGear)) {
13 | stop();
14 | }
15 | super.changeGear(gear);
16 | }
17 |
18 | private boolean isMovingBackwards(Gear gear, Gear actualGear) {
19 | return isMoving() && Gear.R.equals(actualGear) && Gear.D.equals(gear);
20 | }
21 |
22 | private boolean isMovingForwards(Gear gear, Gear actualGear) {
23 | return isMoving() && Gear.D.equals(actualGear) && Gear.R.equals(gear);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/solution/Gear.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.lsp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public enum Gear {
7 | P, // Parking
8 | R, // Reverse
9 | N, // Neutral
10 | D // Drive
11 | }
12 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/solution/Plane.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.lsp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class Plane extends Vehicle {
7 |
8 | // A plane can reverse engine gear while moving forward, no problem here
9 | }
10 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/solution/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.lsp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Vehicle {
7 |
8 | private boolean isMoving;
9 | private Gear gear;
10 |
11 | public void move(){
12 | isMoving = true;
13 | }
14 |
15 | public void stop(){
16 | isMoving = false;
17 | }
18 |
19 | public boolean isMoving() {
20 | return isMoving;
21 | }
22 |
23 | public Gear getGear() {
24 | return gear;
25 | }
26 |
27 | public void changeGear(final Gear gear) {
28 | this.gear = gear;
29 | }
30 |
31 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/violation/Car.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.lsp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class Car extends Vehicle {
7 |
8 | @Override
9 | public void changeGear(Gear gear) {
10 | if(Gear.R.equals(gear) && getGear().equals(Gear.D)){
11 | throw new RuntimeException("Can't change to REVERSE gear when " + getGear().toString() + " gear is engaged!");
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/violation/Gear.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.lsp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public enum Gear {
7 | P, // Parking
8 | R, // Reverse
9 | N, // Neutral
10 | D // Drive
11 | }
12 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/violation/Plane.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.lsp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class Plane extends Vehicle {
7 |
8 | // A plane can reverse engine gear while moving forward, no problem here
9 | }
10 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/lsp/violation/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.lsp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Vehicle {
7 |
8 | private Gear gear;
9 |
10 | public Gear getGear() {
11 | return gear;
12 | }
13 |
14 | public void changeGear(final Gear gear) {
15 | this.gear = gear;
16 | }
17 |
18 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/ocp_solution.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.ocp.solution
5 |
6 | com.github.bsferreira.solid.ocp.solution.DrivingMode
7 | com.github.bsferreira.solid.ocp.solution.EventHandler
8 | com.github.bsferreira.solid.ocp.solution.Economy
9 | com.github.bsferreira.solid.ocp.solution.Comfort
10 | com.github.bsferreira.solid.ocp.solution.Vehicle
11 | com.github.bsferreira.solid.ocp.solution.Sport
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | All
40 | private
41 |
42 |
43 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/ocp_violation.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.ocp.violation
5 |
6 | com.github.bsferreira.solid.ocp.violation.DrivingMode
7 | com.github.bsferreira.solid.ocp.violation.Vehicle
8 | com.github.bsferreira.solid.ocp.violation.EventHandler
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | All
21 | private
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/solution/Comfort.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class Comfort implements DrivingMode {
7 |
8 | private static final int POWER = 400;
9 | private static final int SUSPENSION_HEIGHT = 20;
10 |
11 | @Override
12 | public int getPower() {
13 | return POWER;
14 | }
15 |
16 | @Override
17 | public int getSuspensionHeight() {
18 | return SUSPENSION_HEIGHT;
19 | }
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/solution/DrivingMode.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public interface DrivingMode {
7 |
8 | int getPower();
9 | int getSuspensionHeight();
10 | }
11 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/solution/Economy.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class Economy implements DrivingMode{
7 |
8 | private static final int POWER = 300;
9 | private static final int SUSPENSION_HEIGHT = 20;
10 |
11 | @Override
12 | public int getPower() {
13 | return POWER;
14 | }
15 |
16 | @Override
17 | public int getSuspensionHeight() {
18 | return SUSPENSION_HEIGHT;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/solution/EventHandler.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class EventHandler {
7 |
8 | private Vehicle vehicle;
9 |
10 | public EventHandler(final Vehicle vehicle) {
11 | this.vehicle = vehicle;
12 | }
13 |
14 | public void changeDrivingMode(final DrivingMode drivingMode){
15 | vehicle.setPower(drivingMode.getPower());
16 | vehicle.setSuspensionHeight(drivingMode.getSuspensionHeight());
17 | // now, when we need to add another mode (e.g. ECONOMY) just create a new class: Economy.
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/solution/Sport.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class Sport implements DrivingMode {
7 |
8 | private static final int POWER = 500;
9 | private static final int SUSPENSION_HEIGHT = 10;
10 |
11 | @Override
12 | public int getPower() {
13 | return POWER;
14 | }
15 |
16 | @Override
17 | public int getSuspensionHeight() {
18 | return SUSPENSION_HEIGHT;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/solution/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Vehicle {
7 |
8 | private int power;
9 | private int suspensionHeight;
10 |
11 | public int getPower() {
12 | return power;
13 | }
14 |
15 | public int getSuspensionHeight() {
16 | return suspensionHeight;
17 | }
18 |
19 | public void setPower(final int power) {
20 | this.power = power;
21 | }
22 |
23 | public void setSuspensionHeight(final int suspensionHeight) {
24 | this.suspensionHeight = suspensionHeight;
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/violation/DrivingMode.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public enum DrivingMode {
7 | SPORT, COMFORT
8 | }
9 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/violation/EventHandler.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 16-04-2016.
5 | */
6 | public class EventHandler {
7 |
8 | private Vehicle vehicle;
9 |
10 | public EventHandler(final Vehicle vehicle) {
11 | this.vehicle = vehicle;
12 | }
13 |
14 | public void changeDrivingMode(final DrivingMode drivingMode){
15 | switch (drivingMode){
16 | case SPORT:
17 | vehicle.setPower(500);
18 | vehicle.setSuspensionHeight(10);
19 | break;
20 | case COMFORT:
21 | vehicle.setPower(400);
22 | vehicle.setSuspensionHeight(20);
23 | break;
24 | default:
25 | vehicle.setPower(400);
26 | vehicle.setSuspensionHeight(20);
27 | break;
28 | // when we need to add another mode (e.g. ECONOMY) 2 classes will change DrivingMode and EventHandler.
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/ocp/violation/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.ocp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Vehicle {
7 |
8 | private int power;
9 | private int suspensionHeight;
10 |
11 | public int getPower() {
12 | return power;
13 | }
14 |
15 | public int getSuspensionHeight() {
16 | return suspensionHeight;
17 | }
18 |
19 | public void setPower(final int power) {
20 | this.power = power;
21 | }
22 |
23 | public void setSuspensionHeight(final int suspensionHeight) {
24 | this.suspensionHeight = suspensionHeight;
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/srp/solution/FuelPump.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.srp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class FuelPump {
7 |
8 | public void reFuel(final Vehicle vehicle){
9 | final int remainingFuel = vehicle.getRemainingFuel();
10 | final int additionalFuel = vehicle.getMaxFuel() - remainingFuel;
11 | vehicle.setRemainingFuel(remainingFuel + additionalFuel);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/srp/solution/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.srp.solution;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Vehicle {
7 |
8 | private final int maxFuel;
9 | private int remainingFuel;
10 |
11 | public Vehicle(final int maxFuel) {
12 | this.maxFuel = maxFuel;
13 | remainingFuel = maxFuel;
14 | }
15 |
16 | public int getMaxFuel() {
17 | return maxFuel;
18 | }
19 |
20 | public int getRemainingFuel() {
21 | return remainingFuel;
22 | }
23 |
24 | public void setRemainingFuel(final int remainingFuel) {
25 | this.remainingFuel = remainingFuel;
26 | }
27 |
28 | public void accelerate() {
29 | remainingFuel--;
30 | }
31 | }
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/srp/srp_solution.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.srp.solution
5 |
6 | com.github.bsferreira.solid.srp.solution.Vehicle
7 | com.github.bsferreira.solid.srp.solution.FuelPump
8 |
9 |
10 |
11 |
12 |
13 |
14 | All
15 | private
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/srp/srp_violation.uml:
--------------------------------------------------------------------------------
1 |
2 |
3 | JAVA
4 | com.github.bsferreira.solid.srp.violation
5 |
6 | com.github.bsferreira.solid.srp.violation.Vehicle
7 |
8 |
9 |
10 |
11 |
12 | com.github.bsferreira.solid.srp.violation.Vehicle
13 |
14 |
15 | All
16 | private
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/com/github/bsferreira/solid/srp/violation/Vehicle.java:
--------------------------------------------------------------------------------
1 | package com.github.bsferreira.solid.srp.violation;
2 |
3 | /**
4 | * Created by bsferreira on 10-04-2016.
5 | */
6 | public class Vehicle {
7 |
8 | private final int maxFuel;
9 | private int remainingFuel;
10 |
11 | public Vehicle(final int maxFuel) {
12 | this.maxFuel = maxFuel;
13 | remainingFuel = maxFuel;
14 | }
15 |
16 | // this is not a car's responsibility.
17 | public void reFuel(){
18 | remainingFuel = maxFuel;
19 | }
20 |
21 | public int getMaxFuel() {
22 | return maxFuel;
23 | }
24 |
25 | public int getRemainingFuel() {
26 | return remainingFuel;
27 | }
28 |
29 | public void setRemainingFuel(final int remainingFuel) {
30 | this.remainingFuel = remainingFuel;
31 | }
32 |
33 | public void accelerate() {
34 | remainingFuel--;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------