├── .gitignore
├── .idea
├── .gitignore
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── uiDesigner.xml
├── README.md
├── designpatterns.iml
├── out
└── production
│ └── designpatterns
│ ├── behavioral
│ └── Behavioral Design Patterns.md
│ ├── creational
│ ├── Creational Design Patterns.md
│ ├── abstractfactory
│ │ ├── AbstractFactory.class
│ │ ├── BankFactory$1.class
│ │ ├── BankFactory.class
│ │ ├── Driver.class
│ │ ├── LoanFactory$1.class
│ │ ├── LoanFactory.class
│ │ ├── ObjectType.class
│ │ ├── bank
│ │ │ ├── Bank.class
│ │ │ ├── BankType.class
│ │ │ ├── HDFC.class
│ │ │ ├── ICICI.class
│ │ │ └── SBI.class
│ │ ├── exception
│ │ │ └── ObjectCreationException.class
│ │ └── loan
│ │ │ ├── EducationalLoan.class
│ │ │ ├── HomeLoan.class
│ │ │ ├── Loan.class
│ │ │ ├── LoanType.class
│ │ │ └── PersonalLoan.class
│ └── factory
│ │ ├── Factory.Md
│ │ └── notification
│ │ ├── Driver.class
│ │ ├── EmailNotification.class
│ │ ├── Notification.class
│ │ ├── NotificationAttributes.class
│ │ ├── NotificationFactory.class
│ │ ├── NotificationType.class
│ │ ├── PushNotification.class
│ │ └── SMSNotification.class
│ └── structural
│ └── Structural Design Patterns.md
└── src
├── behavioral
├── Behavioral Design Patterns.md
├── Iterator
│ ├── Main.java
│ ├── generic
│ │ ├── Input.java
│ │ ├── InputCollection.java
│ │ ├── InputIterator.java
│ │ ├── InputIteratorImpl.java
│ │ └── Main.java
│ ├── iterator.md
│ ├── iterator.png
│ └── withoutgeneric
│ │ ├── Hero.java
│ │ ├── HeroCollection.java
│ │ ├── HeroIterator.java
│ │ ├── HeroIteratorImpl.java
│ │ └── Main.java
├── chainofresponsibility
│ ├── atmexample
│ │ ├── Currency.java
│ │ ├── Dollar100Dispenser.java
│ │ ├── Dollar2000Dispenser.java
│ │ ├── Dollar500Dispenser.java
│ │ ├── DollarDispenser.java
│ │ ├── Main.java
│ │ └── ValidateDollarDispenser.java
│ ├── authexample
│ │ ├── AuthenticationProcessor.java
│ │ ├── Main.java
│ │ ├── OAuthProcessor.java
│ │ ├── TokenBasedProcessor.java
│ │ └── UserNamePasswordProcessor.java
│ ├── chain_of_responsibility.md
│ ├── cop.draw.png
│ └── cor.png
├── command
│ ├── cartexample
│ │ ├── FoodDeliveryException.java
│ │ ├── FoodMenuService.java
│ │ ├── Main.java
│ │ ├── data
│ │ │ ├── CartData.java
│ │ │ └── FoodMenuData.java
│ │ ├── model
│ │ │ ├── FoodMenu.java
│ │ │ ├── MealType.java
│ │ │ └── MenuItem.java
│ │ └── pattern
│ │ │ ├── AddCartCommandExecutor.java
│ │ │ ├── CartCommandExecutor.java
│ │ │ ├── CartCommandType.java
│ │ │ └── RemoveCartCommandExecutor.java
│ ├── command.md
│ ├── command.png
│ ├── command_sketch.png
│ └── remoteexample
│ │ ├── Command.java
│ │ ├── Garage.java
│ │ ├── GarageDoorClosedCommand.java
│ │ ├── GarageDoorOpenCommand.java
│ │ ├── Light.java
│ │ ├── LightOffCommand.java
│ │ ├── LightOnCommand.java
│ │ ├── Main.java
│ │ ├── RemoteControl.java
│ │ └── SlotType.java
├── mediator
│ ├── ChatMediator.java
│ ├── ChatMediatorImpl.java
│ ├── Main.java
│ ├── User.java
│ ├── UserImpl.java
│ ├── mediator.md
│ ├── mediator.png
│ └── mediator_sketch.png
├── memento
│ ├── example1
│ │ ├── AccessTime.java
│ │ ├── Checkpoint.java
│ │ ├── Main.java
│ │ └── TimeState.java
│ ├── example2
│ │ ├── Main.java
│ │ ├── TextEditor.java
│ │ ├── TextWindow.java
│ │ └── TextWindowMemento.java
│ ├── memento.md
│ ├── memento.png
│ └── memento_sketch.png
├── observer
│ ├── observer.md
│ ├── observer.png
│ ├── withlibraray
│ │ ├── Driver.java
│ │ ├── NewsSubscriber.java
│ │ ├── Producer.java
│ │ └── SocialMediaSubscriber.java
│ └── withoutlibrary
│ │ ├── Driver.java
│ │ ├── NewsSubscriber.java
│ │ ├── Producer.java
│ │ ├── SocialMediaSubscriber.java
│ │ └── Subscriber.java
├── state
│ ├── DeliveredState.java
│ ├── Main.java
│ ├── OrderedState.java
│ ├── Package.java
│ ├── PackageState.java
│ ├── ReceivedState.java
│ ├── state.md
│ └── state.png
├── strategy
│ ├── Data.java
│ ├── HTMLProcessor.java
│ ├── JSONProcessor.java
│ ├── META_DATA.java
│ ├── Main.java
│ ├── PlainTextProcessor.java
│ ├── Processor.java
│ ├── strategy.md
│ └── strategy.png
├── templatemethod
│ ├── Main.java
│ ├── NonVegPizzaMaker.java
│ ├── PizzaMaker.java
│ ├── VegPizzaMaker.java
│ ├── tempalte_method.md
│ └── tenplate.png
└── visitor
│ ├── AreaVisitor.java
│ ├── Circle.java
│ ├── Main.java
│ ├── PerimeterVisitor.java
│ ├── Rectangle.java
│ ├── Shape.java
│ ├── ShapeVisitor.java
│ ├── Square.java
│ ├── visitor.md
│ ├── visitor.png
│ └── visitor_exp.png
├── creational
├── Creational Design Patterns.md
├── abstractfactory
│ ├── AbstractFactory.java
│ ├── AbstractFactory.md
│ ├── AbstractFactoryProvider.java
│ ├── BankFactory.java
│ ├── Driver.java
│ ├── LoanFactory.java
│ ├── ObjectType.java
│ ├── bank
│ │ ├── Bank.java
│ │ ├── BankType.java
│ │ ├── HDFC.java
│ │ ├── ICICI.java
│ │ └── SBI.java
│ ├── exception
│ │ └── ObjectCreationException.java
│ ├── img.png
│ └── loan
│ │ ├── EducationalLoan.java
│ │ ├── HomeLoan.java
│ │ ├── Loan.java
│ │ ├── LoanType.java
│ │ └── PersonalLoan.java
├── builder
│ ├── Builder.md
│ ├── Driver.java
│ ├── User.java
│ ├── builder.png
│ ├── withoutpriorityfields
│ │ └── Car.java
│ └── withpriorityfields
│ │ ├── Car.java
│ │ ├── CarBuilder.java
│ │ ├── Color.java
│ │ ├── EnginePower.java
│ │ └── SeatCapacity.java
├── factory
│ ├── Factory.md
│ ├── createobject
│ │ ├── Driver.java
│ │ ├── Resource1.java
│ │ ├── Resource2.java
│ │ └── Resource3.java
│ ├── factory.png
│ ├── notification
│ │ ├── Driver.java
│ │ ├── EmailNotification.java
│ │ ├── Notification.java
│ │ ├── NotificationAttributes.java
│ │ ├── NotificationFactory.java
│ │ ├── NotificationType.java
│ │ ├── PushNotification.java
│ │ └── SMSNotification.java
│ └── notificationwithoutpattern
│ │ ├── Driver.java
│ │ ├── EmailNotification.java
│ │ ├── Notification.java
│ │ ├── NotificationAttributes.java
│ │ ├── PushNotification.java
│ │ └── SMSNotification.java
├── prototype
│ ├── Driver.java
│ ├── Employee.java
│ ├── Prototype.java
│ ├── prototype.md
│ └── prototype.png
└── singleton
│ ├── BillPughSingleton.java
│ ├── DoubleLockSingleton.java
│ ├── Driver.java
│ ├── EagerSingleton.java
│ ├── EnumBasedSingleton.java
│ ├── NormalSingleton.java
│ ├── StaticBlockSingleton.java
│ ├── singleton.md
│ └── singleton.png
└── structural
├── Structural Design Patterns.md
├── adaptor
├── adaptor.md
├── adaptor.png
├── adaptor_sketch.png
└── objectadaptor
│ ├── Adaptor.java
│ ├── Driver.java
│ ├── client
│ ├── Client.java
│ ├── ClientInterface.java
│ └── JSONObject.java
│ └── vendor
│ ├── XMLObject.java
│ └── XMLVendor.java
├── bridge
├── Driver.java
├── babstraction
│ ├── Circle.java
│ ├── Rectangle.java
│ ├── Shape.java
│ └── Triangle.java
├── binterface
│ ├── BlackColor.java
│ ├── Color.java
│ ├── RedColor.java
│ └── WhiteColor.java
├── bridge.md
├── bridge_car.png
└── img.png
├── composite
├── Ceo.java
├── Developer.java
├── Driver.java
├── Driver2.java
├── Employee.java
├── Employeer.java
├── Manager.java
├── Position.java
├── ProductOwner.java
├── composite.md
├── composite.png
└── composite_org.png
├── decorator
├── BasicCar.java
├── Car.java
├── CarDecorator.java
├── Driver.java
├── LuxuryCar.java
├── SportsCar.java
├── decorator.md
└── decorator.png
├── facade
├── AudioMixer.java
├── BitrateReader.java
├── CodecFactory.java
├── CompressionCodec.java
├── MPEG4CompressionCodec.java
├── OggCompressionCodec.java
├── VideoFile.java
├── codec_file.ogg
├── facade.md
├── facade.png
├── facde_exp.png
├── withfacade
│ ├── Client.java
│ └── VideoConverterFacade.java
└── withoutfacade
│ └── Client.java
├── flyweight
├── Car.java
├── CarFactory.java
├── CarType.java
├── Driver.java
├── McLearnCar.java
├── PorscheCar.java
├── exception
│ └── ObjectCreationException.java
├── flyweight.md
└── flyweight.png
└── proxy
├── img.png
├── protection
├── Driver.java
├── Internet.java
├── Properties.java
├── ProxyInternet.java
└── RealInternet.java
├── proxy.drawio.png
├── proxy.md
└── virtual
├── Book.java
├── Driver.java
├── OriginalBook.java
└── ProxyBook.java
/.gitignore:
--------------------------------------------------------------------------------
1 | out
2 | .idea
3 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/uiDesigner.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | -
6 |
7 |
8 | -
9 |
10 |
11 | -
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 |
48 |
49 |
50 |
51 | -
52 |
53 |
54 |
55 |
56 | -
57 |
58 |
59 |
60 |
61 | -
62 |
63 |
64 |
65 |
66 | -
67 |
68 |
69 |
70 |
71 | -
72 |
73 |
74 | -
75 |
76 |
77 |
78 |
79 | -
80 |
81 |
82 |
83 |
84 | -
85 |
86 |
87 |
88 |
89 | -
90 |
91 |
92 |
93 |
94 | -
95 |
96 |
97 |
98 |
99 | -
100 |
101 |
102 | -
103 |
104 |
105 | -
106 |
107 |
108 | -
109 |
110 |
111 | -
112 |
113 |
114 |
115 |
116 | -
117 |
118 |
119 | -
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GOFDesignPatterns
2 |
3 | **Full Playlist** : https://youtube.com/playlist?list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK
4 |
5 | ### Creational Design patterns
6 | * [**Factory Design Pattern**](src/creational/factory/Factory.md) - [**Video Explanation**](https://www.youtube.com/watch?v=ddsqo1Ug1sY&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=2&pp=gAQBiAQB)
7 | * [**Abstract Factory Design Pattern**](src/creational/abstractfactory/AbstractFactory.md) - [**Video Explanation**](https://www.youtube.com/watch?v=UvJVE4wiFi0&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=3&pp=gAQBiAQB)
8 | * [**Builder Design Pattern**](src/creational/builder/Builder.md) - [**Video Explanation**](https://www.youtube.com/watch?v=EfuA9_2QQcM&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=4&pp=gAQBiAQB)
9 | * [**Prototype Design Pattern**](src/creational/prototype/prototype.md) - [**Video Explanation**](https://www.youtube.com/watch?v=tJA1oOl-PpI&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=5&pp=gAQBiAQB)
10 | * [**Singleton Design Pattern**](src/creational/singleton/singleton.md) - [**Video Explanation**](https://www.youtube.com/watch?v=xfuMSZAYwy0&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=6&pp=gAQBiAQB)
11 |
12 | ### Structural Design patterns
13 | * [**Adaptor Design Pattern**](src/structural/adaptor/adaptor.md) - [**Video Explanation**](https://www.youtube.com/watch?v=mhBRXspL92U&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=7&pp=gAQBiAQB)
14 | * [**Proxy Design Pattern**](src/structural/proxy/proxy.md) - [**Video Explanation**](https://www.youtube.com/watch?v=6_2CF-Ra0AY&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=8&t=7s&pp=gAQBiAQB)
15 | * [**Decorator Design Pattern**](src/structural/decorator/decorator.md) - [**Video Explanation**](https://www.youtube.com/watch?v=E8-wTMs79pU&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=9&pp=gAQBiAQB)
16 | * [**Bridge Design Pattern**](src/structural/bridge/bridge.md)- [**Video Explanation**](https://www.youtube.com/watch?v=nMv_jfbRiGo&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=10&pp=gAQBiAQB)
17 | * [**Composite Design Pattern**](src/structural/composite/composite.md) - [**Video Explanation**](https://www.youtube.com/watch?v=KD1v_7mnYhA&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=11&pp=gAQBiAQB)
18 | * [**Facade Design Pattern**](src/structural/facade/facade.md) - [**Video Explanation**](https://www.youtube.com/watch?v=_wXkrceYJWA&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=12&pp=gAQBiAQB)
19 | * [**Flyweight Design Pattern**](src/structural/flyweight/flyweight.md) - [**Video Explanation**](https://www.youtube.com/watch?v=QVxI4W65TAA&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=13&pp=gAQBiAQB)
20 |
21 | ### Behavioural Design patterns
22 | * [**Chain Of Responsibility Design Pattern**](src/behavioral/chainofresponsibility/chain_of_responsibility.md) - [**Video Explanation**](https://www.youtube.com/watch?v=5uBhRUSen7s&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=14&pp=gAQBiAQB)
23 | * [**Command Design Pattern**](src/behavioral/command/command.md) - [**Video Explanation**](https://www.youtube.com/watch?v=S33KwKzMe8s&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=15&pp=gAQBiAQB)
24 | * [**Iterator Design Pattern**](src/behavioral/Iterator/iterator.md) - [**Video Explanation**](https://www.youtube.com/watch?v=WIBlhs4pqd0&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=16&pp=gAQBiAQB)
25 | * [**Mediator Design Pattern**](src/behavioral/mediator/mediator.md) - [**Video Explanation**](https://www.youtube.com/watch?v=9Cm6pSZlZwc&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=17&pp=gAQBiAQB)
26 | * [**Memento Design Pattern**](src/behavioral/memento/memento.md) - [**Video Explanation**](https://www.youtube.com/watch?v=t7gl1Hktwdc&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=18&pp=gAQBiAQB)
27 | * [**Observer Design Pattern**](src/behavioral/observer/observer.md) - [**Video Explanation**](https://www.youtube.com/watch?v=foxHOu5YT_o&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=20&pp=gAQBiAQBsAQB)
28 | * [**State Design Pattern**](src/behavioral/state/state.md) - [**Video Explanation**](https://www.youtube.com/watch?v=mR46hg2e8pU&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=21&pp=gAQBiAQBsAQB)
29 | * [**Strategy Design Pattern**](src/behavioral/strategy/strategy.md) - [**Video Explanation**](https://www.youtube.com/watch?v=ddsqo1Ug1sY&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=2&pp=gAQBiAQB)
30 | * [**Template Method Design Pattern**](src/behavioral/templatemethod/tempalte_method.md) - [**Video Explanation**](https://www.youtube.com/watch?v=ies_MAFXIBc&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=22&pp=gAQBiAQBsAQB)
31 | * [**Visitor Design Pattern**](src/behavioral/visitor/visitor.md) - [**Video Explanation**](https://www.youtube.com/watch?v=SK50E5CAzr0&list=PLyjE_CyqGikoF0dpijEH7RBzZ6KGhRxkK&index=23&pp=gAQBiAQBsAQB)
32 |
33 |
--------------------------------------------------------------------------------
/designpatterns.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/out/production/designpatterns/behavioral/Behavioral Design Patterns.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/behavioral/Behavioral Design Patterns.md
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/Creational Design Patterns.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/Creational Design Patterns.md
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/AbstractFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/AbstractFactory.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/BankFactory$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/BankFactory$1.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/BankFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/BankFactory.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/Driver.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/Driver.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/LoanFactory$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/LoanFactory$1.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/LoanFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/LoanFactory.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/ObjectType.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/ObjectType.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/bank/Bank.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/bank/Bank.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/bank/BankType.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/bank/BankType.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/bank/HDFC.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/bank/HDFC.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/bank/ICICI.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/bank/ICICI.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/bank/SBI.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/bank/SBI.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/exception/ObjectCreationException.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/exception/ObjectCreationException.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/loan/EducationalLoan.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/loan/EducationalLoan.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/loan/HomeLoan.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/loan/HomeLoan.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/loan/Loan.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/loan/Loan.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/loan/LoanType.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/loan/LoanType.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/abstractfactory/loan/PersonalLoan.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/abstractfactory/loan/PersonalLoan.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/Factory.Md:
--------------------------------------------------------------------------------
1 | **Intent**
2 | ----------
3 | Define an interface for creating an object, but let subclasses decide which class to
4 | instantiate. Factory Method lets a class defer instantiation to subclasses.
5 |
6 | Also called - *Virtual Constructor*
7 |
8 | It promotes the loose-coupling by eliminating the need to bind application-specific classes into the code.
9 |
10 | 
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/notification/Driver.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/factory/notification/Driver.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/notification/EmailNotification.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/factory/notification/EmailNotification.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/notification/Notification.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/factory/notification/Notification.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/notification/NotificationAttributes.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/factory/notification/NotificationAttributes.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/notification/NotificationFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/factory/notification/NotificationFactory.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/notification/NotificationType.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/factory/notification/NotificationType.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/notification/PushNotification.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/factory/notification/PushNotification.class
--------------------------------------------------------------------------------
/out/production/designpatterns/creational/factory/notification/SMSNotification.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/creational/factory/notification/SMSNotification.class
--------------------------------------------------------------------------------
/out/production/designpatterns/structural/Structural Design Patterns.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/out/production/designpatterns/structural/Structural Design Patterns.md
--------------------------------------------------------------------------------
/src/behavioral/Behavioral Design Patterns.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/src/behavioral/Behavioral Design Patterns.md
--------------------------------------------------------------------------------
/src/behavioral/Iterator/Main.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Iterator;
5 |
6 | public class Main {
7 | public static void main(String[] args) {
8 | ArrayList arrayList = new ArrayList<>();
9 | arrayList.add("One");
10 | arrayList.add("Two");
11 | arrayList.add("Three");
12 |
13 | Iterator iterator = arrayList.iterator();
14 |
15 | while (iterator.hasNext()){
16 | System.out.println(iterator.next());
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/generic/Input.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.generic;
2 |
3 | public class Input {
4 |
5 | private final String data;
6 |
7 | public Input(String data) {
8 | this.data = data;
9 | }
10 |
11 | public String getData() {
12 | return data;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/generic/InputCollection.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.generic;
2 |
3 | public class InputCollection {
4 |
5 | Object[] objects;
6 | int index;
7 |
8 | public InputCollection(int n){
9 | objects = new Object[n];
10 | index = 0;
11 | }
12 |
13 | public void addData(Input object){
14 | objects[index] = object;
15 | index++;
16 | }
17 |
18 | public InputIterator iterator(){
19 | return new InputIteratorImpl(objects);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/generic/InputIterator.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.generic;
2 |
3 | public interface InputIterator {
4 |
5 | boolean hasNext();
6 |
7 | E next();
8 | }
9 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/generic/InputIteratorImpl.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.generic;
2 |
3 | public class InputIteratorImpl implements InputIterator {
4 |
5 | Object[] objects;
6 | int cursor;
7 | int length;
8 |
9 | InputIteratorImpl(Object[] objects){
10 | this.objects = objects;
11 | cursor = 0;
12 | length = objects.length;
13 | }
14 |
15 | @Override
16 | public boolean hasNext() {
17 | return cursor < objects.length;
18 | }
19 |
20 | @Override
21 | @SuppressWarnings("unchecked")
22 | public E next() {
23 | return (E) objects[cursor++];
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/generic/Main.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.generic;
2 |
3 | import behavioral.Iterator.withoutgeneric.Hero;
4 | import behavioral.Iterator.withoutgeneric.HeroCollection;
5 | import behavioral.Iterator.withoutgeneric.HeroIterator;
6 |
7 | public class Main {
8 | public static void main(String[] args) {
9 | InputCollection inputCollection = new InputCollection<>(5);
10 |
11 | inputCollection.addData(new Input("NTR Jr"));
12 | inputCollection.addData(new Input("Prabhas"));
13 | inputCollection.addData(new Input("Yash"));
14 | inputCollection.addData(new Input("Allu Arjun"));
15 | inputCollection.addData(new Input("Rishab Shetty"));
16 |
17 | InputIterator iterator = inputCollection.iterator();
18 |
19 | while (iterator.hasNext()){
20 | System.out.println(iterator.next().getData());
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/iterator.md:
--------------------------------------------------------------------------------
1 | Intent
2 | ---------
3 | *Provide a way to access the elements of an aggregate object sequentially without
4 | exposing its underlying representation.*
5 |
6 | 1. The key idea in this pattern is to take the responsibility for access and traversal out of the list object
7 | and put it into an iterator object.
8 | 2. The Iterator class defines an interface for accessing the list's elements. An iterator object is responsible
9 | for keeping track of the current element; that is, it knows which elements have been traversed already.
10 |
11 | 
12 |
13 | Overall, the Iterator design pattern is a useful tool for encapsulating the logic for accessing elements of a collection, making it easier to write code that works with a variety of different collections in a uniform manner.
--------------------------------------------------------------------------------
/src/behavioral/Iterator/iterator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/src/behavioral/Iterator/iterator.png
--------------------------------------------------------------------------------
/src/behavioral/Iterator/withoutgeneric/Hero.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.withoutgeneric;
2 |
3 | public class Hero {
4 | private final String name;
5 |
6 | public Hero(String name) {
7 | this.name = name;
8 | }
9 |
10 | public String getName() {
11 | return name;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/withoutgeneric/HeroCollection.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.withoutgeneric;
2 |
3 | public class HeroCollection {
4 |
5 | Hero[] heroes;
6 | int index;
7 |
8 | public HeroCollection(int n){
9 | heroes = new Hero[n];
10 | index = 0;
11 | }
12 |
13 | public void addHero(Hero hero){
14 | heroes[index] = hero;
15 | index++;
16 | }
17 |
18 | public HeroIterator iterator(){
19 | return new HeroIteratorImpl(heroes);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/withoutgeneric/HeroIterator.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.withoutgeneric;
2 |
3 | public interface HeroIterator {
4 |
5 | boolean hasNext();
6 |
7 | Hero next();
8 | }
9 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/withoutgeneric/HeroIteratorImpl.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.withoutgeneric;
2 |
3 | public class HeroIteratorImpl implements HeroIterator {
4 |
5 | Hero[] heroes;
6 | int cursor;
7 | int length;
8 |
9 | HeroIteratorImpl(Hero[] heroes){
10 | this.heroes = heroes;
11 | cursor = 0;
12 | length = heroes.length;
13 | }
14 |
15 | @Override
16 | public boolean hasNext() {
17 | return cursor < heroes.length;
18 | }
19 |
20 | @Override
21 | public Hero next() {
22 | return heroes[cursor++];
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/behavioral/Iterator/withoutgeneric/Main.java:
--------------------------------------------------------------------------------
1 | package behavioral.Iterator.withoutgeneric;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | HeroCollection heroCollection = new HeroCollection(5);
6 |
7 | heroCollection.addHero(new Hero("NTR Jr"));
8 | heroCollection.addHero(new Hero("Prabhas"));
9 | heroCollection.addHero(new Hero("Yash"));
10 | heroCollection.addHero(new Hero("Allu Arjun"));
11 | heroCollection.addHero(new Hero("Rishab Shetty"));
12 |
13 | HeroIterator iterator = heroCollection.iterator();
14 |
15 | while (iterator.hasNext()){
16 | System.out.println(iterator.next().getName());
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/atmexample/Currency.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.atmexample;
2 |
3 | public class Currency {
4 | private final int amount;
5 |
6 | public Currency(int amount) {
7 | this.amount = amount;
8 | }
9 |
10 | public int getAmount() {
11 | return amount;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/atmexample/Dollar100Dispenser.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.atmexample;
2 |
3 | public class Dollar100Dispenser extends DollarDispenser {
4 |
5 | public Dollar100Dispenser(DollarDispenser dollarDispenser) {
6 | super(dollarDispenser);
7 | }
8 |
9 | @Override
10 | public void dispense(Currency cur) {
11 | if(cur.getAmount()>=100){
12 | int num = cur.getAmount()/100;
13 | int remainder = cur.getAmount() % 100;
14 | System.out.println("Dispensing "+num+" 100$ note");
15 | if(remainder !=0) dollarDispenser.dispense(new Currency(remainder));
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/atmexample/Dollar2000Dispenser.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.atmexample;
2 |
3 | public class Dollar2000Dispenser extends DollarDispenser {
4 |
5 | public Dollar2000Dispenser(DollarDispenser dollarDispenser) {
6 | super(dollarDispenser);
7 | }
8 |
9 | @Override
10 | public void dispense(Currency cur) {
11 | if(cur.getAmount()>=2000){
12 | int num = cur.getAmount()/2000;
13 | int remainder = cur.getAmount() % 2000;
14 | System.out.println("Dispensing "+num+" 2000$ note");
15 | if(remainder !=0) dollarDispenser.dispense(new Currency(remainder));
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/atmexample/Dollar500Dispenser.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.atmexample;
2 |
3 | public class Dollar500Dispenser extends DollarDispenser {
4 |
5 | public Dollar500Dispenser(DollarDispenser dollarDispenser) {
6 | super(dollarDispenser);
7 | }
8 |
9 | @Override
10 | public void dispense(Currency cur) {
11 | if(cur.getAmount()>=500){
12 | int num = cur.getAmount()/500;
13 | int remainder = cur.getAmount() % 500;
14 | System.out.println("Dispensing "+num+" 500$ note");
15 | if(remainder !=0) dollarDispenser.dispense(new Currency(remainder));
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/atmexample/DollarDispenser.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.atmexample;
2 |
3 | public abstract class DollarDispenser {
4 | public DollarDispenser dollarDispenser;
5 |
6 | public DollarDispenser(DollarDispenser dollarDispenser) {
7 | this.dollarDispenser = dollarDispenser;
8 | }
9 |
10 | public abstract void dispense(Currency cur);
11 | }
12 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/atmexample/Main.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.atmexample;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | DollarDispenser dollarDispenser = new ValidateDollarDispenser(
6 | new Dollar2000Dispenser(new Dollar500Dispenser(new Dollar100Dispenser(null)))
7 | );
8 |
9 | dollarDispenser.dispense(new Currency(5600));
10 |
11 | dollarDispenser.dispense(new Currency(5620));
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/atmexample/ValidateDollarDispenser.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.atmexample;
2 |
3 | public class ValidateDollarDispenser extends DollarDispenser{
4 |
5 | public ValidateDollarDispenser(DollarDispenser dollarDispenser) {
6 | super(dollarDispenser);
7 | }
8 |
9 | @Override
10 | public void dispense(Currency cur) {
11 | if(cur.getAmount()%100==0){
12 | dollarDispenser.dispense(cur);
13 | } else {
14 | System.out.println("Please Enter Amount in 2000,500,100 denominations");
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/authexample/AuthenticationProcessor.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.authexample;
2 |
3 | public abstract class AuthenticationProcessor {
4 | public AuthenticationProcessor nextProcessor;
5 |
6 | public AuthenticationProcessor(AuthenticationProcessor nextProcessor) {
7 | this.nextProcessor = nextProcessor;
8 | }
9 |
10 | public abstract boolean isAuthorized(AuthenticationProcessor authProvider);
11 | }
12 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/authexample/Main.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.authexample;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | AuthenticationProcessor authenticationProcessor = new UserNamePasswordProcessor(
6 | new OAuthProcessor(null)
7 | );
8 |
9 | System.out.println(authenticationProcessor.isAuthorized(new OAuthProcessor(null)));
10 | System.out.println(authenticationProcessor.isAuthorized(new UserNamePasswordProcessor(null)));
11 | System.out.println(authenticationProcessor.isAuthorized(new TokenBasedProcessor(null)));
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/authexample/OAuthProcessor.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.authexample;
2 |
3 | public class OAuthProcessor extends AuthenticationProcessor{
4 |
5 | public OAuthProcessor(AuthenticationProcessor authenticationProcessor){
6 | super(authenticationProcessor);
7 | }
8 |
9 | @Override
10 | public boolean isAuthorized(AuthenticationProcessor authProvider) {
11 | if(authProvider instanceof OAuthProcessor) return true;
12 | else if(nextProcessor!=null) return nextProcessor.isAuthorized(authProvider);
13 | return false;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/authexample/TokenBasedProcessor.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.authexample;
2 |
3 | public class TokenBasedProcessor extends AuthenticationProcessor{
4 |
5 | public TokenBasedProcessor(AuthenticationProcessor authenticationProcessor){
6 | super(authenticationProcessor);
7 | }
8 |
9 | @Override
10 | public boolean isAuthorized(AuthenticationProcessor authProvider) {
11 | if(authProvider instanceof TokenBasedProcessor) return true;
12 | else if(nextProcessor!=null) return nextProcessor.isAuthorized(authProvider);
13 | return false;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/authexample/UserNamePasswordProcessor.java:
--------------------------------------------------------------------------------
1 | package behavioral.chainofresponsibility.authexample;
2 |
3 | public class UserNamePasswordProcessor extends AuthenticationProcessor {
4 |
5 | public UserNamePasswordProcessor(AuthenticationProcessor authenticationProcessor){
6 | super(authenticationProcessor);
7 | }
8 |
9 | @Override
10 | public boolean isAuthorized(AuthenticationProcessor authProvider) {
11 | if(authProvider instanceof UserNamePasswordProcessor) return true;
12 | else if(nextProcessor!=null) return nextProcessor.isAuthorized(authProvider);
13 | return false;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/chain_of_responsibility.md:
--------------------------------------------------------------------------------
1 | Intent:
2 | ---------
3 | Chain of Responsibility is a behavioral design pattern that lets you pass requests along a chain of handlers.
4 | Upon receiving a request, each handler decides either to process the request or to pass it to the next handler
5 | in the chain
6 |
7 | the Chain of Responsibility relies on transforming particular behaviors into stand-alone objects called **handlers**.
8 |
9 | Advantages of Chain of Responsibility
10 | ------------------------------------
11 | 1. Reduced coupling
12 | 2. Added flexibility in assigning responsibilities to objects
13 | 3. Receipt isn't guaranteed
14 |
15 | Disadvantages
16 | --------------
17 | 1. Mostly, it can get broken easily:
18 | if a processor fails to call the next processor, the command gets dropped
19 | if a processor calls the wrong processor, it can lead to a cycle
20 | 2. It can create deep stack traces, which can affect performance
21 | 3. It can lead to duplicate code across processors, increasing maintenance
22 |
23 |
24 | 
25 |
26 | RealWorld
27 | 1. DoFilter
28 | 2. Logger
29 |
30 |
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/cop.draw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/src/behavioral/chainofresponsibility/cop.draw.png
--------------------------------------------------------------------------------
/src/behavioral/chainofresponsibility/cor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lavakumarThatisetti/GOFDesignPatterns/d31ed7eae9156661ccc9395a5822157eac93357f/src/behavioral/chainofresponsibility/cor.png
--------------------------------------------------------------------------------
/src/behavioral/command/cartexample/FoodDeliveryException.java:
--------------------------------------------------------------------------------
1 | package behavioral.command.cartexample;
2 |
3 |
4 |
5 | public class FoodDeliveryException extends RuntimeException {
6 | private String message;
7 |
8 | public FoodDeliveryException(String message) {
9 | this.message = message;
10 | }
11 |
12 | @Override
13 | public String getMessage() {
14 | return message;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/behavioral/command/cartexample/FoodMenuService.java:
--------------------------------------------------------------------------------
1 | package behavioral.command.cartexample;
2 |
3 |
4 | import behavioral.command.cartexample.data.FoodMenuData;
5 | import behavioral.command.cartexample.model.FoodMenu;
6 |
7 | public class FoodMenuService {
8 | private FoodMenuData foodMenuData;
9 |
10 |
11 | public FoodMenuService(FoodMenuData foodMenuData) {
12 | this.foodMenuData = foodMenuData;
13 | }
14 |
15 | public FoodMenu getMenuById(final String menuId) {
16 | if (!foodMenuData.getFoodMenuById().containsKey(menuId)) {
17 | throw new FoodDeliveryException("Food Menu not exists");
18 | }
19 | return foodMenuData.getFoodMenuById().get(menuId);
20 | }
21 |
22 | public FoodMenu getMenuByRestaurantId(final String restaurantId) {
23 | if (!foodMenuData.getFoodMenuIdByRestaurantId().containsKey(restaurantId)) {
24 | throw new FoodDeliveryException("No Data");
25 | }
26 | return getMenuById(foodMenuData.getFoodMenuIdByRestaurantId().get(restaurantId));
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/behavioral/command/cartexample/Main.java:
--------------------------------------------------------------------------------
1 | package behavioral.command.cartexample;
2 |
3 | import behavioral.command.cartexample.data.CartData;
4 | import behavioral.command.cartexample.data.FoodMenuData;
5 | import behavioral.command.cartexample.pattern.AddCartCommandExecutor;
6 | import behavioral.command.cartexample.pattern.CartCommandExecutor;
7 | import behavioral.command.cartexample.pattern.CartCommandType;
8 | import behavioral.command.cartexample.pattern.RemoveCartCommandExecutor;
9 |
10 | import java.util.ArrayList;
11 | import java.util.Arrays;
12 | import java.util.List;
13 |
14 | public class Main {
15 | public static void main(String[] args) throws Exception {
16 |
17 | CartData cartData = new CartData();
18 | FoodMenuService foodMenuService = new FoodMenuService(new FoodMenuData());
19 |
20 | List cartCommandExecutorList = Arrays.asList(new AddCartCommandExecutor(foodMenuService, cartData),
21 | new RemoveCartCommandExecutor(cartData));
22 |
23 | CartCommandType cartCommandType = CartCommandType.ADD_ITEM;
24 | for (CartCommandExecutor cartCommandExecutor : cartCommandExecutorList) {
25 |
26 | if (cartCommandExecutor.isApplicable(cartCommandType)) {
27 | cartCommandExecutor.execute("lava", "Bawaachi", "Biryani");
28 | }
29 |
30 | if (cartCommandExecutor.isApplicable(CartCommandType.REMOVE_ITEM)) {
31 | cartCommandExecutor.execute("lava", "Bawaachi", "Biryani");
32 | }
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/behavioral/command/cartexample/data/CartData.java:
--------------------------------------------------------------------------------
1 | package behavioral.command.cartexample.data;
2 |
3 |
4 | import behavioral.command.cartexample.FoodDeliveryException;
5 |
6 | import java.util.HashMap;
7 | import java.util.List;
8 | import java.util.Map;
9 |
10 |
11 | public class CartData {
12 | private Map>> userToRestaurantIdToMenuItemIds = new HashMap<>();
13 |
14 | public List getMenuItemIds(final String userId, final String restaurantId) {
15 | Map> restaurantIdToMenuItemIds = getRestaurantIdToMenuItemIds(userId);
16 | if (!restaurantIdToMenuItemIds.containsKey(restaurantId)) {
17 | throw new FoodDeliveryException("Cart is empty for this restaurant");
18 | }
19 | return restaurantIdToMenuItemIds.get(restaurantId);
20 | }
21 |
22 | public Map> getRestaurantIdToMenuItemIds(final String userId) {
23 | return userToRestaurantIdToMenuItemIds.getOrDefault(userId, new HashMap<>());
24 | }
25 |
26 | public Map>> getUserToRestaurantIdToMenuItemIds() {
27 | return userToRestaurantIdToMenuItemIds;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/behavioral/command/cartexample/data/FoodMenuData.java:
--------------------------------------------------------------------------------
1 | package behavioral.command.cartexample.data;
2 |
3 | import behavioral.command.cartexample.model.FoodMenu;
4 | import behavioral.command.cartexample.model.MenuItem;
5 |
6 | import java.util.HashMap;
7 | import java.util.Map;
8 |
9 | public class FoodMenuData {
10 | private Map foodMenuById = new HashMap<>();
11 | private Map foodMenuIdByRestaurantId = new HashMap<>();
12 | private Map menuItemById = new HashMap<>();
13 |
14 |
15 | public Map getFoodMenuById() {
16 | return foodMenuById;
17 | }
18 |
19 | public Map getFoodMenuIdByRestaurantId() {
20 | return foodMenuIdByRestaurantId;
21 | }
22 |
23 | public Map getMenuItemById() {
24 | return menuItemById;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/behavioral/command/cartexample/model/FoodMenu.java:
--------------------------------------------------------------------------------
1 | package behavioral.command.cartexample.model;
2 |
3 |
4 | import java.util.List;
5 |
6 |
7 | public class FoodMenu {
8 | private String id;
9 | private List restaurantIds;
10 | private List