feature: Add context object pattern (#2304)

* Add context object pattern and corresponding tests

* Update context pattern

* Add README, class diagram, puml file.
Add toString method in ServiceContext.java.
Add tests for coverage.

* Improvements:
Remove plugin in pom file
Add comments in app.java
Change local variable keyword to var in app.java
Use lombok for getters, setters and tostring
Change method signature in context object

* Refreshing environment-1

* Reconfigure pom file.

Co-authored-by: Alvis Chan <u7287079@edu.anu.au>
Co-authored-by: u7287079 <u7287079@anu.edu.au>
This commit is contained in:
Chak-C
2022-12-29 20:17:28 +11:00
committed by GitHub
parent 695e12379d
commit e223459db8
12 changed files with 498 additions and 0 deletions
@@ -0,0 +1,41 @@
package com.iluwatar.context.object;
import lombok.extern.slf4j.Slf4j;
/**
* In the context object pattern, information and data from underlying protocol-specific classes/systems is decoupled
* and stored into a protocol-independent object in an organised format. The pattern ensures the data contained within
* the context object can be shared and further structured between different layers of a software system.
*
* <p> In this example we show how a context object {@link ServiceContext} can be initiated, edited and passed/retrieved
* in different layers of the program ({@link LayerA}, {@link LayerB}, {@link LayerC}) through use of static methods. </p>
*/
@Slf4j
public class App {
private static final String SERVICE = "SERVICE";
/**
* Program entry point.
* @param args command line args
*/
public static void main(String[] args) {
//Initiate first layer and add service information into context
var layerA = new LayerA();
layerA.addAccountInfo(SERVICE);
LOGGER.info("Context = {}",layerA.getContext());
//Initiate second layer and preserving information retrieved in first layer through passing context object
var layerB = new LayerB(layerA);
layerB.addSessionInfo(SERVICE);
LOGGER.info("Context = {}",layerB.getContext());
//Initiate third layer and preserving information retrieved in first and second layer through passing context object
var layerC = new LayerC(layerB);
layerC.addSearchInfo(SERVICE);
LOGGER.info("Context = {}",layerC.getContext());
}
}