├── Snake_Ladder_Problem ├── Cell.java ├── Jump.java ├── readme.txt ├── Main.java ├── Player.java ├── Dice.java ├── Board.java └── Game.java ├── Design_Pattern ├── src │ └── main │ │ └── java │ │ ├── ObserverDesignPattern │ │ ├── readme.txt │ │ ├── Observer │ │ │ ├── NotificationAlertObserver.java │ │ │ ├── MobileAlertObserverImpl.java │ │ │ └── EmailAlertObserverImpl.java │ │ ├── Observable │ │ │ ├── StockObservable.java │ │ │ └── IphoneObservableImpl.java │ │ └── Store.java │ │ ├── FactoryDesignPattern │ │ ├── Shape.java │ │ ├── readme.txt │ │ ├── Circle.java │ │ ├── Square.java │ │ ├── Rectangle.java │ │ ├── Main.java │ │ └── ShapeFactory.java │ │ ├── DecoratorDesignPattern │ │ ├── ToppingDecorator.java │ │ ├── BasePizza.java │ │ ├── Margherita.java │ │ ├── FarmHouse.java │ │ ├── VegDelight.java │ │ ├── Main.java │ │ ├── ExtraCheese.java │ │ └── ExtraMushroom.java │ │ ├── StrategyDesignPattern │ │ ├── WithoutStrategy │ │ │ ├── GoodVehicle.java │ │ │ ├── PassengerVehicle.java │ │ │ ├── SportsVehicle.java │ │ │ ├── OffRoadVehicle.java │ │ │ └── Vehicle.java │ │ ├── WithStrategy │ │ │ ├── Strategy │ │ │ │ ├── DriveStrategy.java │ │ │ │ ├── NormalDriverStrategy.java │ │ │ │ └── SportDriveStrategy.java │ │ │ ├── Main.java │ │ │ ├── GoodsVehicle.java │ │ │ ├── SportsVehicle.java │ │ │ ├── OffRoadVehicle.java │ │ │ └── Vehicle.java │ │ └── readme.txt │ │ └── ChainResponsiblityDesignPattern │ │ ├── InfoLogProcessor.java │ │ ├── DebugLogProcessor.java │ │ ├── ErrorLogProcessor.java │ │ ├── Main.java │ │ └── LogProcessor.java ├── target │ └── classes │ │ ├── FactoryDesignPattern │ │ ├── Main.class │ │ ├── Shape.class │ │ ├── Circle.class │ │ ├── Square.class │ │ ├── Rectangle.class │ │ └── ShapeFactory.class │ │ ├── DecoratorDesignPattern │ │ ├── Main.class │ │ ├── BasePizza.class │ │ ├── ExtraCheese.class │ │ ├── FarmHouse.class │ │ ├── Margherita.class │ │ ├── VegDelight.class │ │ ├── ExtraMushroom.class │ │ └── ToppingDecorator.class │ │ ├── ObserverDesignPattern │ │ ├── Store.class │ │ ├── Observable │ │ │ ├── StockObservable.class │ │ │ └── IphoneObservableImpl.class │ │ └── Observer │ │ │ ├── EmailAlertObserverImpl.class │ │ │ ├── MobileAlertObserverImpl.class │ │ │ └── NotificationAlertObserver.class │ │ └── StrategyDesignPattern │ │ ├── WithStrategy │ │ ├── Main.class │ │ ├── Vehicle.class │ │ ├── GoodsVehicle.class │ │ ├── OffRoadVehicle.class │ │ ├── SportsVehicle.class │ │ └── Strategy │ │ │ ├── DriveStrategy.class │ │ │ ├── NormalDriverStrategy.class │ │ │ └── SportDriveStrategy.class │ │ └── WithoutStrategy │ │ ├── Vehicle.class │ │ ├── GoodVehicle.class │ │ ├── SportsVehicle.class │ │ ├── OffRoadVehicle.class │ │ └── PassengerVehicle.class └── pom.xml └── singleton ├── DesignPatternApplication.java └── DatabaseLayer.java /Snake_Ladder_Problem/Cell.java: -------------------------------------------------------------------------------- 1 | package Snake_Ladder_Problem; 2 | 3 | public class Cell { 4 | 5 | Jump jump; 6 | } 7 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ObserverDesignPattern/readme.txt: -------------------------------------------------------------------------------- 1 | Observer Desgin Pattern mainly used in notification or alert to the client. -------------------------------------------------------------------------------- /Snake_Ladder_Problem/Jump.java: -------------------------------------------------------------------------------- 1 | package Snake_Ladder_Problem; 2 | 3 | public class Jump { 4 | 5 | int start; 6 | int end; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/FactoryDesignPattern/Shape.java: -------------------------------------------------------------------------------- 1 | package FactoryDesignPattern; 2 | 3 | public interface Shape { 4 | 5 | public void draw(); 6 | } 7 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/FactoryDesignPattern/readme.txt: -------------------------------------------------------------------------------- 1 | this design pattern used when subclass have decided to the create of object or simply says conditional basis 2 | -------------------------------------------------------------------------------- /Snake_Ladder_Problem/readme.txt: -------------------------------------------------------------------------------- 1 | we know ladder and snake functionality will same just difference is 2 | snake(start>end) but in ladder(end>start) so we take common class i.e Jump -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/DecoratorDesignPattern/ToppingDecorator.java: -------------------------------------------------------------------------------- 1 | package DecoratorDesignPattern; 2 | 3 | public abstract class ToppingDecorator extends BasePizza{ 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/DecoratorDesignPattern/BasePizza.java: -------------------------------------------------------------------------------- 1 | package DecoratorDesignPattern; 2 | 3 | public abstract class BasePizza { 4 | 5 | public abstract int cost(); 6 | } 7 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithoutStrategy/GoodVehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithoutStrategy; 2 | 3 | public class GoodVehicle extends Vehicle{ 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Design_Pattern/target/classes/FactoryDesignPattern/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/FactoryDesignPattern/Main.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/FactoryDesignPattern/Shape.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/FactoryDesignPattern/Shape.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/DecoratorDesignPattern/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/DecoratorDesignPattern/Main.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/FactoryDesignPattern/Circle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/FactoryDesignPattern/Circle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/FactoryDesignPattern/Square.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/FactoryDesignPattern/Square.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/ObserverDesignPattern/Store.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/ObserverDesignPattern/Store.class -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithoutStrategy/PassengerVehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithoutStrategy; 2 | 3 | public class PassengerVehicle extends Vehicle{ 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Design_Pattern/target/classes/FactoryDesignPattern/Rectangle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/FactoryDesignPattern/Rectangle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/DecoratorDesignPattern/BasePizza.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/DecoratorDesignPattern/BasePizza.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/DecoratorDesignPattern/ExtraCheese.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/DecoratorDesignPattern/ExtraCheese.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/DecoratorDesignPattern/FarmHouse.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/DecoratorDesignPattern/FarmHouse.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/DecoratorDesignPattern/Margherita.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/DecoratorDesignPattern/Margherita.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/DecoratorDesignPattern/VegDelight.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/DecoratorDesignPattern/VegDelight.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/FactoryDesignPattern/ShapeFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/FactoryDesignPattern/ShapeFactory.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/DecoratorDesignPattern/ExtraMushroom.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/DecoratorDesignPattern/ExtraMushroom.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/DecoratorDesignPattern/ToppingDecorator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/DecoratorDesignPattern/ToppingDecorator.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Main.class -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ObserverDesignPattern/Observer/NotificationAlertObserver.java: -------------------------------------------------------------------------------- 1 | package ObserverDesignPattern.Observer; 2 | 3 | public interface NotificationAlertObserver { 4 | public void update(); 5 | } 6 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithStrategy/Strategy/DriveStrategy.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithStrategy.Strategy; 2 | 3 | public interface DriveStrategy { 4 | public void drive(); 5 | } 6 | -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Vehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Vehicle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/Vehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/Vehicle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/ObserverDesignPattern/Observable/StockObservable.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/ObserverDesignPattern/Observable/StockObservable.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/GoodsVehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/GoodsVehicle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/OffRoadVehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/OffRoadVehicle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/SportsVehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/SportsVehicle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/GoodVehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/GoodVehicle.class -------------------------------------------------------------------------------- /Snake_Ladder_Problem/Main.java: -------------------------------------------------------------------------------- 1 | package Snake_Ladder_Problem; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Game obj=new Game(); 7 | obj.startGame(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/DecoratorDesignPattern/Margherita.java: -------------------------------------------------------------------------------- 1 | package DecoratorDesignPattern; 2 | 3 | public class Margherita extends BasePizza{ 4 | @Override 5 | public int cost() { 6 | return 200; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/SportsVehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/SportsVehicle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/ObserverDesignPattern/Observable/IphoneObservableImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/ObserverDesignPattern/Observable/IphoneObservableImpl.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/ObserverDesignPattern/Observer/EmailAlertObserverImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/ObserverDesignPattern/Observer/EmailAlertObserverImpl.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/ObserverDesignPattern/Observer/MobileAlertObserverImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/ObserverDesignPattern/Observer/MobileAlertObserverImpl.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/OffRoadVehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/OffRoadVehicle.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/PassengerVehicle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithoutStrategy/PassengerVehicle.class -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/DecoratorDesignPattern/FarmHouse.java: -------------------------------------------------------------------------------- 1 | package DecoratorDesignPattern; 2 | 3 | public class FarmHouse extends BasePizza{ 4 | 5 | @Override 6 | public int cost() { 7 | return 100; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/FactoryDesignPattern/Circle.java: -------------------------------------------------------------------------------- 1 | package FactoryDesignPattern; 2 | 3 | public class Circle implements Shape{ 4 | @Override 5 | public void draw() { 6 | System.out.println("draw circle"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/FactoryDesignPattern/Square.java: -------------------------------------------------------------------------------- 1 | package FactoryDesignPattern; 2 | 3 | public class Square implements Shape{ 4 | @Override 5 | public void draw() { 6 | System.out.println("draw square"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/target/classes/ObserverDesignPattern/Observer/NotificationAlertObserver.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/ObserverDesignPattern/Observer/NotificationAlertObserver.class -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/DecoratorDesignPattern/VegDelight.java: -------------------------------------------------------------------------------- 1 | package DecoratorDesignPattern; 2 | 3 | public class VegDelight extends BasePizza{ 4 | 5 | @Override 6 | public int cost() { 7 | return 150; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Strategy/DriveStrategy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Strategy/DriveStrategy.class -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/FactoryDesignPattern/Rectangle.java: -------------------------------------------------------------------------------- 1 | package FactoryDesignPattern; 2 | 3 | public class Rectangle implements Shape{ 4 | @Override 5 | public void draw() { 6 | System.out.println("draw rectangle"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Strategy/NormalDriverStrategy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Strategy/NormalDriverStrategy.class -------------------------------------------------------------------------------- /Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Strategy/SportDriveStrategy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandrana/Design_pattern_by_Concept-Coding/HEAD/Design_Pattern/target/classes/StrategyDesignPattern/WithStrategy/Strategy/SportDriveStrategy.class -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/readme.txt: -------------------------------------------------------------------------------- 1 | when we used Strategy Design Pattern?? 2 | 3 | when we have two or more child class have same code is using and that code is not present in the Base code 4 | (parent class) then we will used Strategy Design pattern 5 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithStrategy/Main.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithStrategy; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | Vehicle vehicle=new GoodsVehicle(); 6 | vehicle.drive(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithoutStrategy/SportsVehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithoutStrategy; 2 | 3 | public class SportsVehicle extends Vehicle{ 4 | 5 | public void drive(){ 6 | System.out.println("sports drive capability"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithoutStrategy/OffRoadVehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithoutStrategy; 2 | 3 | public class OffRoadVehicle extends Vehicle{ 4 | 5 | public void drive() { 6 | System.out.println("sports drive capability"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/DecoratorDesignPattern/Main.java: -------------------------------------------------------------------------------- 1 | package DecoratorDesignPattern; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | BasePizza basePizza=new ExtraCheese(new Margherita()); 6 | System.out.println(basePizza.cost()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithoutStrategy/Vehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithoutStrategy; 2 | 3 | public class Vehicle { 4 | 5 | public void driver(){ 6 | //Some code 7 | System.out.println("normal drive capability"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Snake_Ladder_Problem/Player.java: -------------------------------------------------------------------------------- 1 | package Snake_Ladder_Problem; 2 | 3 | public class Player { 4 | 5 | String id; 6 | int currentPosition; 7 | 8 | public Player(String id,int currentPosition){ 9 | this.id=id; 10 | this.currentPosition=currentPosition; 11 | } 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/FactoryDesignPattern/Main.java: -------------------------------------------------------------------------------- 1 | package FactoryDesignPattern; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | ShapeFactory shapeFactory=new ShapeFactory(); 7 | Shape shape=shapeFactory.getShape("CIRCLE"); 8 | shape.draw(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithStrategy/Strategy/NormalDriverStrategy.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithStrategy.Strategy; 2 | 3 | public class NormalDriverStrategy implements DriveStrategy{ 4 | 5 | @Override 6 | public void drive(){ 7 | System.out.println("normal drive strategy"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithStrategy/Strategy/SportDriveStrategy.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithStrategy.Strategy; 2 | 3 | public class SportDriveStrategy implements DriveStrategy{ 4 | 5 | @Override 6 | public void drive() { 7 | System.out.println("sports drive strategy"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithStrategy/GoodsVehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithStrategy; 2 | 3 | import StrategyDesignPattern.WithStrategy.Strategy.NormalDriverStrategy; 4 | 5 | public class GoodsVehicle extends Vehicle{ 6 | 7 | GoodsVehicle(){ 8 | super(new NormalDriverStrategy()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithStrategy/SportsVehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithStrategy; 2 | 3 | import StrategyDesignPattern.WithStrategy.Strategy.SportDriveStrategy; 4 | 5 | public class SportsVehicle extends Vehicle{ 6 | 7 | public SportsVehicle(){ 8 | super(new SportDriveStrategy()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithStrategy/OffRoadVehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithStrategy; 2 | 3 | import StrategyDesignPattern.WithStrategy.Strategy.SportDriveStrategy; 4 | 5 | public class OffRoadVehicle extends Vehicle{ 6 | 7 | public OffRoadVehicle(){ 8 | super(new SportDriveStrategy()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /singleton/DesignPatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.progrank.singleton; 2 | 3 | 4 | public class DesignPatternApplication { 5 | 6 | public static void main(String[] args) { 7 | DatabaseLayer db1=DatabaseLayer.getInstance(); 8 | System.out.println(db1); 9 | 10 | DatabaseLayer db2=DatabaseLayer.getInstance(); 11 | System.out.println(db2); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/DecoratorDesignPattern/ExtraCheese.java: -------------------------------------------------------------------------------- 1 | package DecoratorDesignPattern; 2 | 3 | public class ExtraCheese extends ToppingDecorator{ 4 | BasePizza basePizza; 5 | public ExtraCheese(BasePizza basePizza){ 6 | this.basePizza=basePizza; 7 | } 8 | 9 | public int cost(){ 10 | return this.basePizza.cost()+10; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/DecoratorDesignPattern/ExtraMushroom.java: -------------------------------------------------------------------------------- 1 | package DecoratorDesignPattern; 2 | 3 | public class ExtraMushroom extends ToppingDecorator{ 4 | 5 | BasePizza basePizza; 6 | public ExtraMushroom(BasePizza basePizza){ 7 | this.basePizza=basePizza; 8 | } 9 | 10 | public int cost(){ 11 | return this.basePizza.cost()+15; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ObserverDesignPattern/Observable/StockObservable.java: -------------------------------------------------------------------------------- 1 | package ObserverDesignPattern.Observable; 2 | 3 | import ObserverDesignPattern.Observer.NotificationAlertObserver; 4 | 5 | public interface StockObservable { 6 | 7 | public void add(NotificationAlertObserver observer); 8 | public void remove(NotificationAlertObserver observer); 9 | public void notifySubscribers(); 10 | public void setStockCount(int newStockAdded); 11 | public int getStockCount(); 12 | } 13 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/StrategyDesignPattern/WithStrategy/Vehicle.java: -------------------------------------------------------------------------------- 1 | package StrategyDesignPattern.WithStrategy; 2 | 3 | import StrategyDesignPattern.WithStrategy.Strategy.DriveStrategy; 4 | 5 | public class Vehicle { 6 | 7 | DriveStrategy driveStrategy; 8 | 9 | //this is known as construction injection 10 | public Vehicle(DriveStrategy driveStrategy){ 11 | this.driveStrategy=driveStrategy; 12 | } 13 | 14 | public void drive(){ 15 | driveStrategy.drive(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/FactoryDesignPattern/ShapeFactory.java: -------------------------------------------------------------------------------- 1 | package FactoryDesignPattern; 2 | 3 | public class ShapeFactory { 4 | 5 | Shape getShape(String input){ 6 | switch (input){ 7 | case "CIRCLE": 8 | return new Circle(); 9 | 10 | case "RECTANGLE": 11 | return new Rectangle(); 12 | case "SQUARE": 13 | return new Square(); 14 | default: 15 | return null; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ChainResponsiblityDesignPattern/InfoLogProcessor.java: -------------------------------------------------------------------------------- 1 | package ChainResponsiblityDesignPattern; 2 | 3 | public class InfoLogProcessor extends LogProcessor{ 4 | 5 | public InfoLogProcessor(LogProcessor nextLogProcessor) { 6 | super(nextLogProcessor); 7 | } 8 | 9 | public void log(int logLevel,String message){ 10 | if(logLevel == INFO){ 11 | System.out.println("INFO: "+message); 12 | }else{ 13 | super.log(logLevel, message); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ChainResponsiblityDesignPattern/DebugLogProcessor.java: -------------------------------------------------------------------------------- 1 | package ChainResponsiblityDesignPattern; 2 | 3 | public class DebugLogProcessor extends LogProcessor{ 4 | 5 | public DebugLogProcessor(LogProcessor nextLogProcessor) { 6 | super(nextLogProcessor); 7 | } 8 | 9 | public void log(int logLevel,String message){ 10 | if(logLevel == DEBUG){ 11 | System.out.println("DEBUG: "+message); 12 | }else{ 13 | super.log(logLevel, message); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ChainResponsiblityDesignPattern/ErrorLogProcessor.java: -------------------------------------------------------------------------------- 1 | package ChainResponsiblityDesignPattern; 2 | 3 | public class ErrorLogProcessor extends LogProcessor{ 4 | 5 | public ErrorLogProcessor(LogProcessor nextLogProcessor) { 6 | super(nextLogProcessor); 7 | } 8 | 9 | public void log(int logLevel,String message){ 10 | if(logLevel == ERROR){ 11 | System.out.println("ERROR: "+message); 12 | }else{ 13 | super.log(logLevel, message); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ChainResponsiblityDesignPattern/Main.java: -------------------------------------------------------------------------------- 1 | package ChainResponsiblityDesignPattern; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | 7 | LogProcessor logProcessor=new InfoLogProcessor( 8 | new ErrorLogProcessor(new DebugLogProcessor(null))); 9 | 10 | logProcessor.log(LogProcessor.ERROR, "exception happen"); 11 | logProcessor.log(LogProcessor.DEBUG, "need to debug this"); 12 | logProcessor.log(LogProcessor.INFO, "just for info"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Snake_Ladder_Problem/Dice.java: -------------------------------------------------------------------------------- 1 | package Snake_Ladder_Problem; 2 | 3 | import java.util.concurrent.ThreadLocalRandom; 4 | 5 | public class Dice { 6 | 7 | int diceCount; 8 | int min=1; 9 | int max=6; 10 | 11 | public Dice(int diceCount){ 12 | this.diceCount=diceCount; 13 | } 14 | 15 | public int rollDice(){ 16 | int totalSum=0; 17 | int diceUsed=0; 18 | 19 | while(diceUsed 2 | 5 | 4.0.0 6 | 7 | org.example 8 | Design_Pattern 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 17 13 | 17 14 | 15 | 16 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ChainResponsiblityDesignPattern/LogProcessor.java: -------------------------------------------------------------------------------- 1 | package ChainResponsiblityDesignPattern; 2 | 3 | public abstract class LogProcessor { 4 | 5 | public static int INFO=1; 6 | public static int DEBUG = 2; 7 | public static int ERROR = 3; 8 | 9 | LogProcessor nextLoggerProcessor; 10 | 11 | public LogProcessor(LogProcessor logProcessor){ 12 | this.nextLoggerProcessor=logProcessor; 13 | } 14 | 15 | public void log(int logLevel,String message){ 16 | if(nextLoggerProcessor != null){ 17 | nextLoggerProcessor.log(logLevel, message); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /singleton/DatabaseLayer.java: -------------------------------------------------------------------------------- 1 | package com.progrank.singleton; 2 | 3 | public class DatabaseLayer { 4 | // private static DatabaseLayer db=new DatabaseLayer(); 5 | // 6 | // private DatabaseLayer() { 7 | // 8 | // } 9 | // public static DatabaseLayer getInstance() { 10 | // return db; 11 | // } 12 | 13 | 14 | // double checked locking 15 | 16 | private static volatile DatabaseLayer db=null; 17 | private DatabaseLayer() {} 18 | public static DatabaseLayer getInstance() { 19 | if(db==null) { 20 | synchronized(DatabaseLayer.class){ 21 | if(db==null) 22 | db=new DatabaseLayer(); 23 | } 24 | } 25 | return db; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ObserverDesignPattern/Observer/MobileAlertObserverImpl.java: -------------------------------------------------------------------------------- 1 | package ObserverDesignPattern.Observer; 2 | 3 | import ObserverDesignPattern.Observable.StockObservable; 4 | 5 | public class MobileAlertObserverImpl implements NotificationAlertObserver{ 6 | 7 | String userName; 8 | StockObservable stockObservable; 9 | 10 | public MobileAlertObserverImpl(String emailId,StockObservable stockObservable){ 11 | this.userName=emailId; 12 | this.stockObservable=stockObservable; 13 | } 14 | 15 | 16 | @Override 17 | public void update() { 18 | sendMsgOnMobile(userName,"Product is in stock hurry up!!!"); 19 | } 20 | 21 | public void sendMsgOnMobile(String userName,String msg){ 22 | System.out.println("msg sent to : "+userName); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ObserverDesignPattern/Observer/EmailAlertObserverImpl.java: -------------------------------------------------------------------------------- 1 | package ObserverDesignPattern.Observer; 2 | 3 | import ObserverDesignPattern.Observable.StockObservable; 4 | 5 | public class EmailAlertObserverImpl implements NotificationAlertObserver{ 6 | 7 | String emailId; 8 | StockObservable stockObservable; 9 | 10 | public EmailAlertObserverImpl(String emailId,StockObservable stockObservable){ 11 | this.emailId=emailId; 12 | this.stockObservable=stockObservable; 13 | } 14 | 15 | 16 | @Override 17 | public void update() { 18 | sendMail(emailId,"product is in stock hurry up!!!"); 19 | } 20 | 21 | public void sendMail(String emailId,String msg){ 22 | System.out.println("mail sent to : "+emailId); 23 | //send the actual email to the end user 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ObserverDesignPattern/Store.java: -------------------------------------------------------------------------------- 1 | package ObserverDesignPattern; 2 | 3 | import ObserverDesignPattern.Observable.IphoneObservableImpl; 4 | import ObserverDesignPattern.Observable.StockObservable; 5 | import ObserverDesignPattern.Observer.EmailAlertObserverImpl; 6 | import ObserverDesignPattern.Observer.MobileAlertObserverImpl; 7 | import ObserverDesignPattern.Observer.NotificationAlertObserver; 8 | 9 | public class Store { 10 | 11 | public static void main(String[] args) { 12 | 13 | StockObservable iphoneStockObservable=new IphoneObservableImpl(); 14 | 15 | NotificationAlertObserver observer1=new EmailAlertObserverImpl("abc@gmail.com", iphoneStockObservable); 16 | NotificationAlertObserver observer2=new EmailAlertObserverImpl("xyz@gmail.com", iphoneStockObservable); 17 | NotificationAlertObserver observer3=new MobileAlertObserverImpl("abc_username", iphoneStockObservable); 18 | 19 | iphoneStockObservable.add(observer1); 20 | iphoneStockObservable.add(observer2); 21 | iphoneStockObservable.add(observer3); 22 | 23 | iphoneStockObservable.setStockCount(10); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Design_Pattern/src/main/java/ObserverDesignPattern/Observable/IphoneObservableImpl.java: -------------------------------------------------------------------------------- 1 | package ObserverDesignPattern.Observable; 2 | 3 | import ObserverDesignPattern.Observer.NotificationAlertObserver; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | public class IphoneObservableImpl implements StockObservable{ 9 | 10 | public List observerList=new ArrayList<>(); 11 | public int stockCount=0; 12 | 13 | 14 | @Override 15 | public void add(NotificationAlertObserver observer) { 16 | observerList.add(observer); 17 | } 18 | 19 | @Override 20 | public void remove(NotificationAlertObserver observer) { 21 | observerList.remove(observer); 22 | } 23 | 24 | @Override 25 | public void notifySubscribers() { 26 | for(NotificationAlertObserver observer:observerList){ 27 | observer.update(); 28 | } 29 | } 30 | 31 | @Override 32 | public void setStockCount(int newStockAdded) { 33 | if(stockCount==0){ 34 | notifySubscribers(); 35 | } 36 | stockCount=stockCount+newStockAdded; 37 | } 38 | 39 | @Override 40 | public int getStockCount() { 41 | return stockCount; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Snake_Ladder_Problem/Board.java: -------------------------------------------------------------------------------- 1 | package Snake_Ladder_Problem; 2 | 3 | import java.util.concurrent.ThreadLocalRandom; 4 | 5 | public class Board { 6 | 7 | Cell[][] cells; 8 | 9 | Board(int boardSize,int numberOfSnakes,int numberOfLadders){ 10 | initializeCells(boardSize); 11 | addSnakesLadders(cells,numberOfSnakes,numberOfLadders); 12 | } 13 | 14 | private void initializeCells(int boardSize){ 15 | cells=new Cell[boardSize][boardSize]; 16 | 17 | for(int i=0;i0){ 29 | int snakeHead= ThreadLocalRandom.current().nextInt(1,cells.length*cells.length-1); 30 | int snakeTail=ThreadLocalRandom.current().nextInt(1,cells.length*cells.length-1); 31 | 32 | if(snakeTail>=snakeHead){ 33 | continue; 34 | } 35 | Jump snakeObj=new Jump(); 36 | snakeObj.start=snakeHead; 37 | snakeObj.end=snakeTail; 38 | 39 | Cell cell=getCell(snakeHead); 40 | cell.jump=snakeObj; 41 | 42 | numberOfSnakes--; 43 | } 44 | 45 | while(numberOfLadders>0){ 46 | int ladderStart=ThreadLocalRandom.current().nextInt(1,cells.length*cells.length-1); 47 | int ladderEnd=ThreadLocalRandom.current().nextInt(1,cells.length*cells.length-1); 48 | 49 | if(ladderStart>=ladderEnd){ 50 | continue; 51 | } 52 | 53 | Jump ladderObj=new Jump(); 54 | ladderObj.start=ladderStart; 55 | ladderObj.end=ladderEnd; 56 | 57 | Cell cell=getCell(ladderStart); 58 | cell.jump=ladderObj; 59 | 60 | numberOfLadders--; 61 | } 62 | } 63 | 64 | Cell getCell(int playerPosition){ 65 | int boardRow=playerPosition/cells.length; 66 | int boardColumn=playerPosition % cells.length; 67 | 68 | return cells[boardRow][boardColumn]; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /Snake_Ladder_Problem/Game.java: -------------------------------------------------------------------------------- 1 | package Snake_Ladder_Problem; 2 | 3 | import java.util.Deque; 4 | import java.util.LinkedList; 5 | 6 | public class Game { 7 | 8 | Board board; 9 | Dice dice; 10 | Deque playersList=new LinkedList<>(); 11 | Player winner; 12 | 13 | public Game(){ 14 | initializeGame(); 15 | } 16 | 17 | private void initializeGame(){ 18 | board=new Board(10, 5, 4); 19 | dice=new Dice(1); 20 | winner=null; 21 | addPlayers(); 22 | } 23 | 24 | private void addPlayers(){ 25 | Player player1=new Player("p1", 0); 26 | Player player2=new Player("p2", 0); 27 | 28 | playersList.add(player1); 29 | playersList.add(player2); 30 | 31 | } 32 | public void startGame(){ 33 | 34 | while(winner==null){ 35 | //check whose turn now 36 | Player playerTurn=findPlayerTurn(); 37 | System.out.println("Player turn is "+playerTurn.id+" current position is: "+playerTurn.currentPosition); 38 | 39 | //roll the dice 40 | int dicNumbers=dice.rollDice(); 41 | 42 | //get the position 43 | int playerNewPosition=playerTurn.currentPosition+dicNumbers; 44 | playerNewPosition=jumpCheck(playerNewPosition); 45 | playerTurn.currentPosition=playerNewPosition; 46 | 47 | System.out.println("Player turn is "+playerTurn.id+" new position is "+playerNewPosition); 48 | 49 | //checking for winning condition 50 | if(playerNewPosition>=board.cells.length*board.cells.length-1){ 51 | winner=playerTurn; 52 | } 53 | } 54 | 55 | System.out.println("WINNER Is "+winner.id); 56 | 57 | } 58 | private Player findPlayerTurn(){ 59 | Player playerTurns=playersList.removeFirst(); 60 | playersList.add(playerTurns); 61 | return playerTurns; 62 | } 63 | 64 | private int jumpCheck(int playerNewPosition){ 65 | if(playerNewPosition > board.cells.length*board.cells.length-1){ 66 | return playerNewPosition; 67 | } 68 | 69 | Cell cell= board.getCell(playerNewPosition); 70 | if(cell.jump!=null && cell.jump.start==playerNewPosition){ 71 | String jumpBy=(cell.jump.start