diff --git a/com/javadevjournal/design/behavioral/cor/ATMDispenser.java b/com/javadevjournal/design/behavioral/cor/ATMDispenser.java new file mode 100644 index 0000000..c575c5e --- /dev/null +++ b/com/javadevjournal/design/behavioral/cor/ATMDispenser.java @@ -0,0 +1,32 @@ +package main.com.kunwar.designpatterns.behavioral.cor; +import java.util.Scanner; +/** + * @author Kunwar Vikas + */ +public class ATMDispenser { + private DispenseChain dispenseChain1; + public ATMDispenser() { + // initialize the chain + this.dispenseChain1 = new Dollar50Dispenser(); + DispenseChain dispenseChain2 = new Dollar20Dispenser(); + DispenseChain dispenseChain3 = new Dollar10Dispenser(); + + // set the chain of responsibility + dispenseChain1.setNextChain(dispenseChain2); + dispenseChain2.setNextChain(dispenseChain3); + } + + public static void main(String[] args) { + ATMDispenser atmDispenser = new ATMDispenser(); + int amount = 0; + System.out.print("Enter amount to dispense: "); + Scanner input = new Scanner(System.in); + amount = input.nextInt(); + if (amount % 10 != 0) { + System.out.println("Amount should be in multiple of 10s."); + return; + } + // process the request + atmDispenser.dispenseChain1.dispense(new Currency(amount)); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/cor/Currency.java b/com/javadevjournal/design/behavioral/cor/Currency.java new file mode 100644 index 0000000..677c794 --- /dev/null +++ b/com/javadevjournal/design/behavioral/cor/Currency.java @@ -0,0 +1,15 @@ +package main.com.kunwar.designpatterns.behavioral.cor; + +/** + * @author Kunwar Vikas + */ +public class Currency { + private int amount; + + public Currency(int amount){ + this.amount=amount; + } + public int getAmount(){ + return this.amount; + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/cor/DispenseChain.java b/com/javadevjournal/design/behavioral/cor/DispenseChain.java new file mode 100644 index 0000000..f77fa27 --- /dev/null +++ b/com/javadevjournal/design/behavioral/cor/DispenseChain.java @@ -0,0 +1,9 @@ +package main.com.kunwar.designpatterns.behavioral.cor; + +/** + * @author Kunwar Vikas + */ +public interface DispenseChain { + void setNextChain(DispenseChain nextChain); + void dispense(Currency currency); +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/cor/Dollar10Dispenser.java b/com/javadevjournal/design/behavioral/cor/Dollar10Dispenser.java new file mode 100644 index 0000000..450d6a9 --- /dev/null +++ b/com/javadevjournal/design/behavioral/cor/Dollar10Dispenser.java @@ -0,0 +1,26 @@ +package main.com.kunwar.designpatterns.behavioral.cor; + +/** + * @author Kunwar Vikas + */ +public class Dollar10Dispenser implements DispenseChain { + private DispenseChain dispenseChain; + + @Override + public void setNextChain(DispenseChain nextChain) { + this.dispenseChain =nextChain; + } + + @Override + public void dispense(Currency currency) { + if(currency.getAmount() >= 10){ + int num = currency.getAmount()/10; + int remainder = currency.getAmount() % 10; + System.out.println("Dispensing "+num+" 10$ note"); + if(remainder !=0) this.dispenseChain.dispense(new Currency(remainder)); + }else{ + this.dispenseChain.dispense(currency); + } + } + +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/cor/Dollar20Dispenser.java b/com/javadevjournal/design/behavioral/cor/Dollar20Dispenser.java new file mode 100644 index 0000000..cb2f762 --- /dev/null +++ b/com/javadevjournal/design/behavioral/cor/Dollar20Dispenser.java @@ -0,0 +1,25 @@ +package main.com.kunwar.designpatterns.behavioral.cor; + +/** + * @author Kunwar Vikas + */ +public class Dollar20Dispenser implements DispenseChain { + private DispenseChain dispenseChain; + + @Override + public void setNextChain(DispenseChain nextChain) { + this.dispenseChain = nextChain; + } + @Override + public void dispense(Currency currency) { + if (currency.getAmount() >= 20) { + int num = currency.getAmount() / 20; + int remainder = currency.getAmount() % 20; + System.out.println("Dispensing " + num + " 20$ note"); + if (remainder != 0) this.dispenseChain.dispense(new Currency(remainder)); + } else { + this.dispenseChain.dispense(currency); + } + } +} + diff --git a/com/javadevjournal/design/behavioral/cor/Dollar50Dispenser.java b/com/javadevjournal/design/behavioral/cor/Dollar50Dispenser.java new file mode 100644 index 0000000..c89799f --- /dev/null +++ b/com/javadevjournal/design/behavioral/cor/Dollar50Dispenser.java @@ -0,0 +1,24 @@ +package main.com.kunwar.designpatterns.behavioral.cor; + +/** + * @author Kunwar Vikas + */ +public class Dollar50Dispenser implements DispenseChain { + private DispenseChain dispenseChain; + + @Override + public void setNextChain(DispenseChain nextChain) { + this.dispenseChain =nextChain; + } + @Override + public void dispense(Currency currency) { + if(currency.getAmount() >= 50){ + int num = currency.getAmount()/50; + int remainder = currency.getAmount() % 50; + System.out.println("Dispensing "+num+" 50$ note"); + if(remainder !=0) this.dispenseChain.dispense(new Currency(remainder)); + }else{ + this.dispenseChain.dispense(currency); + } + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/template/Cricket.java b/com/javadevjournal/design/behavioral/template/Cricket.java new file mode 100644 index 0000000..948fb79 --- /dev/null +++ b/com/javadevjournal/design/behavioral/template/Cricket.java @@ -0,0 +1,21 @@ +package main.com.kunwar.designpatterns.behavioral.template; + +/** + * @author Kunwar + */ +public class Cricket extends Game { + + @Override + void endPlay() {System.out.println("Cricket Game Finished!"); + } + + @Override + void initialize() { + System.out.println("Cricket Game Initialized! Start playing."); + } + + @Override + void startPlay() { + System.out.println("Cricket Game Started. Enjoy the game!"); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/template/Football.java b/com/javadevjournal/design/behavioral/template/Football.java new file mode 100644 index 0000000..b8970ed --- /dev/null +++ b/com/javadevjournal/design/behavioral/template/Football.java @@ -0,0 +1,22 @@ +package main.com.kunwar.designpatterns.behavioral.template; + +/** + * @author Kunwar + */ +public class Football extends Game { + + @Override + void endPlay() { + System.out.println("Football Game Finished!"); + } + + @Override + void initialize() { + System.out.println("Football Game Initialized! Start playing."); + } + + @Override + void startPlay() { + System.out.println("Football Game Started. Enjoy the game!"); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/template/Game.java b/com/javadevjournal/design/behavioral/template/Game.java new file mode 100644 index 0000000..528b968 --- /dev/null +++ b/com/javadevjournal/design/behavioral/template/Game.java @@ -0,0 +1,20 @@ +package main.com.kunwar.designpatterns.behavioral.template; + +/** + * @author Kunwar + */ +public abstract class Game { + abstract void initialize(); + abstract void startPlay(); + abstract void endPlay(); + + //template method + public final void play(){ + //initialize the game + initialize(); + //start game + startPlay(); + //end game + endPlay(); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/template/Hockey.java b/com/javadevjournal/design/behavioral/template/Hockey.java new file mode 100644 index 0000000..a276d12 --- /dev/null +++ b/com/javadevjournal/design/behavioral/template/Hockey.java @@ -0,0 +1,22 @@ +package main.com.kunwar.designpatterns.behavioral.template; + +/** + * @author Kunwar + */ +public class Hockey extends Game { + + @Override + void endPlay() { + System.out.println("Hockey Game Finished!"); + } + + @Override + void initialize() { + System.out.println("Hockey Game Initialized! Start playing."); + } + + @Override + void startPlay() { + System.out.println("Hockey Game Started. Enjoy the game!"); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/template/TemplatePatternDemo.java b/com/javadevjournal/design/behavioral/template/TemplatePatternDemo.java new file mode 100644 index 0000000..27baa50 --- /dev/null +++ b/com/javadevjournal/design/behavioral/template/TemplatePatternDemo.java @@ -0,0 +1,20 @@ +package main.com.kunwar.designpatterns.behavioral.template; + +/** + * @author Kunwar + */ +public class TemplatePatternDemo { + public static void main(String[] args) { + Game game = new Cricket(); + game.play(); + System.out.println(); + game = new Football(); + game.play(); + System.out.println(); + game = new Hockey(); + game.play(); + System.out.println(); + game = new Volleyball(); + game.play(); + } +} diff --git a/com/javadevjournal/design/behavioral/template/Volleyball.java b/com/javadevjournal/design/behavioral/template/Volleyball.java new file mode 100644 index 0000000..edaa412 --- /dev/null +++ b/com/javadevjournal/design/behavioral/template/Volleyball.java @@ -0,0 +1,22 @@ +package main.com.kunwar.designpatterns.behavioral.template; + +/** + * @author Kunwar + */ +public class Volleyball extends Game { + + @Override + void endPlay() { + System.out.println("Volleyball Game Finished!"); + } + + @Override + void initialize() { + System.out.println("Volleyball Game Initialized! Start playing."); + } + + @Override + void startPlay() { + System.out.println("Volleyball Game Started. Enjoy the game!"); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Bridge/BridgePatternClient.java b/com/javadevjournal/design/structural/Bridge/BridgePatternClient.java new file mode 100644 index 0000000..0d92387 --- /dev/null +++ b/com/javadevjournal/design/structural/Bridge/BridgePatternClient.java @@ -0,0 +1,27 @@ +package javadevjournal.design.structural.Bridge; + +/** + * @author Kunwar + */ +public class BridgePatternClient { + public static void main(String[] args) { + QuestionFormat questions = new QuestionFormat("Java Programming Language"); + questions.question = new JavaQuestions(); + questions.display(); + questions.previous(); + + questions.next(); + questions.display(); + + questions.next(); + questions.display(); + + questions.previous(); + questions.display(); + + questions.newOne("What is inheritance? "); + questions.newOne("How many types of inheritance are there in java?"); + + questions.displayAll(); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Bridge/IQuestion.java b/com/javadevjournal/design/structural/Bridge/IQuestion.java new file mode 100644 index 0000000..5cab8ed --- /dev/null +++ b/com/javadevjournal/design/structural/Bridge/IQuestion.java @@ -0,0 +1,18 @@ +package javadevjournal.design.structural.Bridge; + +/** + * @author Kunwar + */ +public interface IQuestion { + public void nextQuestion(); + + public void previousQuestion(); + + public void newQuestion(String q); + + public void deleteQuestion(String q); + + public void displayQuestion(); + + public void displayAllQuestions(); +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Bridge/JavaQuestions.java b/com/javadevjournal/design/structural/Bridge/JavaQuestions.java new file mode 100644 index 0000000..252837b --- /dev/null +++ b/com/javadevjournal/design/structural/Bridge/JavaQuestions.java @@ -0,0 +1,59 @@ +package javadevjournal.design.structural.Bridge; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Kunwar + */ +public class JavaQuestions implements IQuestion { + + private List questionsList = new ArrayList(); + private int currQuesCounter = 0; + + public JavaQuestions() { + questionsList.add("What is class? "); + questionsList.add("What is interface? "); + questionsList.add("What is abstraction? "); + questionsList.add("How multiple polymorphism is achieved in java? "); + questionsList.add("How many types of exception handling are there in java? "); + questionsList.add("Define the keyword final for variable, method, and class in java? "); + questionsList.add("What is abstract class? "); + questionsList.add("What is multi-threading? "); + } + + public void nextQuestion() { + if (currQuesCounter <= questionsList.size() - 1) { + currQuesCounter++; + } else { + System.out.println("We are already at the last question"); + } + + } + + public void previousQuestion() { + if (currQuesCounter > 0) { + currQuesCounter--; + } else { + System.out.println("We are already at the first question"); + } + } + + public void newQuestion(String question) { + questionsList.add(question); + } + + public void deleteQuestion(String question) { + questionsList.remove(question); + } + + public void displayQuestion() { + System.out.println(questionsList.get(currQuesCounter)); + } + + public void displayAllQuestions() { + for (String question : questionsList) { + System.out.println(question); + } + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Bridge/QuestionFormat.java b/com/javadevjournal/design/structural/Bridge/QuestionFormat.java new file mode 100644 index 0000000..5a744c0 --- /dev/null +++ b/com/javadevjournal/design/structural/Bridge/QuestionFormat.java @@ -0,0 +1,16 @@ +package javadevjournal.design.structural.Bridge; + +/** + * @author Kunwar + */ +public class QuestionFormat extends QuestionManager { + public QuestionFormat(String catalog) { + super(catalog); + } + + public void displayAll() { + System.out.println("\n---------------------------------------------------------"); + super.displayAll(); + System.out.println("-----------------------------------------------------------"); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Bridge/QuestionManager.java b/com/javadevjournal/design/structural/Bridge/QuestionManager.java new file mode 100644 index 0000000..b81d17b --- /dev/null +++ b/com/javadevjournal/design/structural/Bridge/QuestionManager.java @@ -0,0 +1,38 @@ +package javadevjournal.design.structural.Bridge; + +/** + * @author Kunwar + */ +public class QuestionManager { + protected IQuestion question; + public String catalog; + + public QuestionManager(String catalog) { + this.catalog = catalog; + } + + public void next() { + question.nextQuestion(); + } + + public void previous() { + question.previousQuestion(); + } + + public void newOne(String quest) { + question.newQuestion(quest); + } + + public void delete(String quest) { + question.deleteQuestion(quest); + } + + public void display() { + question.displayQuestion(); + } + + public void displayAll() { + System.out.println("Question Paper: " + catalog); + question.displayAllQuestions(); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Composite/Circle.java b/com/javadevjournal/design/structural/Composite/Circle.java new file mode 100644 index 0000000..d3a18b2 --- /dev/null +++ b/com/javadevjournal/design/structural/Composite/Circle.java @@ -0,0 +1,12 @@ +package javadevjournal.design.structural.Composite; + +/** + * @author Kunwar + */ +public class Circle implements Shape { + + @Override + public void drawShape(String color) { + System.out.println("Drawing Circle with color " + color); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Composite/Drawing.java b/com/javadevjournal/design/structural/Composite/Drawing.java new file mode 100644 index 0000000..09d74cd --- /dev/null +++ b/com/javadevjournal/design/structural/Composite/Drawing.java @@ -0,0 +1,35 @@ +package javadevjournal.design.structural.Composite; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Kunwar + */ +public class Drawing implements Shape { + + private List shapesList = new ArrayList(); + + @Override + public void drawShape(String fillColor) { + for (Shape shape : shapesList) { + shape.drawShape(fillColor); + } + } + + //adding shape to drawing + public void add(Shape s) { + this.shapesList.add(s); + } + + //removing shape from drawing + public void remove(Shape s) { + shapesList.remove(s); + } + + //removing all the shapes + public void clear() { + System.out.println("Clearing all the shapes from drawing"); + this.shapesList.clear(); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Composite/Rectangle.java b/com/javadevjournal/design/structural/Composite/Rectangle.java new file mode 100644 index 0000000..90733da --- /dev/null +++ b/com/javadevjournal/design/structural/Composite/Rectangle.java @@ -0,0 +1,11 @@ +package javadevjournal.design.structural.Composite; + +/** + * @author Kunwar + */ +public class Rectangle implements Shape { + @Override + public void drawShape(String color) { + System.out.println("Drawing Rectangle with color " + color); + } +} diff --git a/com/javadevjournal/design/structural/Composite/Shape.java b/com/javadevjournal/design/structural/Composite/Shape.java new file mode 100644 index 0000000..2056cd1 --- /dev/null +++ b/com/javadevjournal/design/structural/Composite/Shape.java @@ -0,0 +1,8 @@ +package javadevjournal.design.structural.Composite; + +/** + * @author Kunwar + */ +public interface Shape { + public void drawShape(String fillColor); +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Composite/Square.java b/com/javadevjournal/design/structural/Composite/Square.java new file mode 100644 index 0000000..06bb790 --- /dev/null +++ b/com/javadevjournal/design/structural/Composite/Square.java @@ -0,0 +1,11 @@ +package javadevjournal.design.structural.Composite; + +/** + * @author Kunwar + */ +public class Square implements Shape { + @Override + public void drawShape(String color) { + System.out.println("Drawing Square with color " + color); + } +} diff --git a/com/javadevjournal/design/structural/Composite/TestCompositePattern.java b/com/javadevjournal/design/structural/Composite/TestCompositePattern.java new file mode 100644 index 0000000..825b6b8 --- /dev/null +++ b/com/javadevjournal/design/structural/Composite/TestCompositePattern.java @@ -0,0 +1,31 @@ +package javadevjournal.design.structural.Composite; + +/** + * @author Kunwar + */ +public class TestCompositePattern { + + public static void main(String[] args) { + Shape triangle = new Triangle(); + Shape triangle1 = new Triangle(); + Shape circle = new Circle(); + Shape square = new Square(); + Shape rectangle = new Rectangle(); + + Drawing drawing = new Drawing(); + drawing.add(triangle1); + drawing.add(triangle1); + drawing.add(circle); + drawing.add(square); + drawing.add(rectangle); + drawing.drawShape("Red"); + + drawing.clear(); + + drawing.add(triangle); + drawing.add(circle); + drawing.add(square); + drawing.add(rectangle); + drawing.drawShape("Blue"); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/structural/Composite/Triangle.java b/com/javadevjournal/design/structural/Composite/Triangle.java new file mode 100644 index 0000000..f28cb26 --- /dev/null +++ b/com/javadevjournal/design/structural/Composite/Triangle.java @@ -0,0 +1,12 @@ +package javadevjournal.design.structural.Composite; + +/** + * @author Kunwar + */ +public class Triangle implements Shape { + + @Override + public void drawShape(String color) { + System.out.println("Drawing Triangle with color " + color); + } +} \ No newline at end of file