Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@ cd java-patterns-and-constructs
## Da List
### Patterns
* [Abstract Factory](src/main/java/com/penapereira/example/constructs/abstractfactory/)
* [Adapter](src/main/java/com/penapereira/example/constructs/adapter/)
* [Decorator](src/main/java/com/penapereira/example/constructs/decorator/)
* [Factory](src/main/java/com/penapereira/example/constructs/factory/)
* [Factory Method](src/main/java/com/penapereira/example/constructs/factorymethod/)
* [Observer](src/main/java/com/penapereira/example/constructs/observer/)
* [Singleton](src/main/java/com/penapereira/example/constructs/singleton/)
* [Strategy](src/main/java/com/penapereira/example/constructs/strategy/)
* [Template Method](src/main/java/com/penapereira/example/constructs/templatemethod/)
### Constructs and Problems
* [Producer/Consumer](src/main/java/com/penapereira/example/constructs/producerconsumer/), a multi-process synchronization problem.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.penapereira.example.constructs.adapter;

public class Adaptee {
public String specificRequest() {
return "Adaptee";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.penapereira.example.constructs.adapter;

public class Adapter implements Target {
private final Adaptee adaptee;

public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}

@Override
public String request() {
return "Adapter(" + adaptee.specificRequest() + ")";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.penapereira.example.constructs.adapter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.penapereira.example.constructs.app.ExampleRunnerInterface;

@Component
public class AdapterExampleRunner implements ExampleRunnerInterface {

private static final Logger log = LoggerFactory.getLogger(AdapterExampleRunner.class);

@Override
public void runExample() throws Exception {
log.trace("Executing Adapter Pattern Implementation");

Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);

log.trace(" " + target.request());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.penapereira.example.constructs.adapter;

public interface Target {
String request();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.penapereira.example.constructs.decorator;

public interface ComponentIF {
String operation();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.penapereira.example.constructs.decorator;

public class ConcreteComponent implements ComponentIF {
@Override
public String operation() {
return "ConcreteComponent";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.penapereira.example.constructs.decorator;

public class ConcreteDecoratorA extends Decorator {

public ConcreteDecoratorA(ComponentIF component) {
super(component);
}

@Override
public String operation() {
return "ConcreteDecoratorA(" + component.operation() + ")";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.penapereira.example.constructs.decorator;

public abstract class Decorator implements ComponentIF {
protected final ComponentIF component;

protected Decorator(ComponentIF component) {
this.component = component;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.penapereira.example.constructs.decorator;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.penapereira.example.constructs.app.ExampleRunnerInterface;

import com.penapereira.example.constructs.decorator.ComponentIF;

@Component
public class DecoratorExampleRunner implements ExampleRunnerInterface {

private static final Logger log = LoggerFactory.getLogger(DecoratorExampleRunner.class);

@Override
public void runExample() throws Exception {
log.trace("Executing Decorator Pattern Implementation");

ComponentIF component = new ConcreteComponent();
ComponentIF decorated = new ConcreteDecoratorA(component);

log.trace(" " + decorated.operation());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.penapereira.example.constructs.adapter;

import org.junit.jupiter.api.Test;

class AdapterExampleRunnerTests {
@Test
void runExampleRuns() throws Exception {
new AdapterExampleRunner().runExample();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.penapereira.example.constructs.decorator;

import org.junit.jupiter.api.Test;

class DecoratorExampleRunnerTests {
@Test
void runExampleRuns() throws Exception {
new DecoratorExampleRunner().runExample();
}
}