├── 2016 ├── 1.TemplateMethod │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── tm │ │ ├── solution1 │ │ ├── CoffeeRecipe.java │ │ ├── Driver.java │ │ └── TeaRecipe.java │ │ ├── solution2 │ │ ├── AbstractRecipe.java │ │ ├── CoffeeRecipe.java │ │ ├── Driver.java │ │ └── TeaRecipe.java │ │ ├── solution3 │ │ ├── AbstractRecipe.java │ │ ├── CoffeeRecipe.java │ │ ├── Driver.java │ │ └── TeaRecipe.java │ │ ├── solution4 │ │ ├── AbstractRecipe.java │ │ ├── CoffeeRecipe.java │ │ ├── Driver.java │ │ └── TeaRecipe.java │ │ └── solution5 │ │ ├── AbstractRecipe.java │ │ ├── CoffeeRecipe.java │ │ ├── Driver.java │ │ └── TeaRecipe.java ├── 10.Singleton │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── singleton │ │ ├── Clipboard.java │ │ └── Driver.java ├── 11.FactoryMethod │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── fm │ │ ├── solution1 │ │ ├── Client.java │ │ ├── DefaultCache.java │ │ ├── ICache.java │ │ ├── JCache.java │ │ └── TrieCache.java │ │ ├── solution2 │ │ ├── CacheFactory.java │ │ ├── Client.java │ │ ├── DefaultCache.java │ │ ├── ICache.java │ │ ├── JCache.java │ │ └── TrieCache.java │ │ └── solution3 │ │ ├── CacheFactory1.java │ │ ├── Client.java │ │ ├── DefaultCache.java │ │ ├── ICache.java │ │ ├── ICacheFactory.java │ │ ├── JCache.java │ │ └── TrieCache.java ├── 12.AbstractFactory │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── af │ │ ├── solution1 │ │ ├── AudiCar.java │ │ ├── Driver.java │ │ ├── EChasis.java │ │ ├── EGearbox.java │ │ ├── EStereo.java │ │ ├── IChasis.java │ │ ├── IGearbox.java │ │ ├── IStereo.java │ │ ├── LChasis.java │ │ ├── LGearbox.java │ │ ├── LStereo.java │ │ ├── MChasis.java │ │ ├── MGearbox.java │ │ └── MStereo.java │ │ └── solution2 │ │ ├── AudiCar.java │ │ ├── AudiEconomyCarFactory.java │ │ ├── AudiMediumCarFactory.java │ │ ├── Driver.java │ │ ├── EChasis.java │ │ ├── EGearbox.java │ │ ├── EStereo.java │ │ ├── ICarFactory.java │ │ ├── IChasis.java │ │ ├── IGearbox.java │ │ ├── IStereo.java │ │ ├── LChasis.java │ │ ├── LGearbox.java │ │ ├── LStereo.java │ │ ├── MChasis.java │ │ ├── MGearbox.java │ │ └── MStereo.java ├── 13.Composite │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── composite │ │ ├── solution1 │ │ ├── Directory.java │ │ ├── Driver.java │ │ ├── File.java │ │ └── FileSystem.java │ │ └── solution2 │ │ ├── Directory.java │ │ ├── Driver.java │ │ ├── Entry.java │ │ └── File.java ├── 14.Visitor │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── visitor │ │ ├── solution1 │ │ ├── Driver.java │ │ ├── EmailDetails.java │ │ ├── IMailClient.java │ │ ├── OperaMailClient.java │ │ └── SquirrelMailClient.java │ │ └── solution2 │ │ ├── Driver.java │ │ ├── EmailDetails.java │ │ ├── IMailClient.java │ │ ├── IVisitor.java │ │ ├── MacConfigurationVisitor.java │ │ ├── OperaMailClient.java │ │ ├── SquirrelMailClient.java │ │ └── WinConfigurationVisitor.java ├── 15.Prototype │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── prototype │ │ └── solution1 │ │ ├── CacheFactory.java │ │ ├── Client.java │ │ ├── DefaultCache.java │ │ ├── ICache.java │ │ ├── JCache.java │ │ └── TrieCache.java ├── 16.Adapter │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── adapter │ │ ├── solution1 │ │ ├── Driver.java │ │ ├── IList.java │ │ ├── IStack.java │ │ ├── LinkedList.java │ │ ├── StackAdapter.java │ │ └── Vector.java │ │ └── solution2 │ │ ├── Driver.java │ │ ├── IList.java │ │ ├── IStack.java │ │ ├── LinkedList.java │ │ ├── StackAdapter.java │ │ └── Vector.java ├── 17.Flyweight │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── fw │ │ ├── solution1 │ │ ├── Digit.java │ │ └── Driver.java │ │ └── solution3 │ │ ├── Digit.java │ │ ├── Driver.java │ │ └── FlyWeightFactory.java ├── 18.ChainOfResponsibility │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── cor │ │ ├── solution1 │ │ ├── AbstractRole.java │ │ ├── CEO.java │ │ ├── Client.java │ │ ├── Director.java │ │ ├── ExecutiveComitte.java │ │ ├── SeniorManager.java │ │ └── VP.java │ │ └── solution2 │ │ ├── AbstractRole.java │ │ ├── CEO.java │ │ ├── Client.java │ │ ├── Director.java │ │ ├── ExecutiveComitte.java │ │ ├── SeniorManager.java │ │ └── VP.java ├── 19.Memento │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── memento │ │ ├── solution1 │ │ ├── Driver.java │ │ ├── Inventory.java │ │ └── Movie.java │ │ ├── solution2 │ │ ├── Driver.java │ │ ├── Inventory.java │ │ ├── Movie.java │ │ └── ObjectStorage.java │ │ └── solution3 │ │ ├── Driver.java │ │ ├── Inventory.java │ │ ├── InventoryCareTaker.java │ │ ├── Memento.java │ │ └── Movie.java ├── 2.State │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── sp │ │ ├── solution1 │ │ ├── Driver.java │ │ └── GumballMachine.java │ │ └── solution2 │ │ ├── Driver.java │ │ ├── GumballMachine.java │ │ ├── GumballsNoQuarterState.java │ │ ├── GumballsQuarterState.java │ │ ├── IState.java │ │ ├── NoGumballsNoQuarterState.java │ │ └── NoGumballsQuarterState.java ├── 20.Proxy │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── proxy │ │ ├── solution1 │ │ ├── Document.java │ │ ├── Driver.java │ │ └── Image.java │ │ └── solution2 │ │ ├── Document.java │ │ ├── Driver.java │ │ ├── IImage.java │ │ ├── Image.java │ │ └── ImageProxy.java ├── 21.Bridge │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── bridge │ │ └── solution2 │ │ ├── AbstractTaskView.java │ │ ├── BulletTaskView.java │ │ ├── Driver.java │ │ ├── DuedateSortStrategy.java │ │ ├── ISort.java │ │ ├── ListTaskView.java │ │ ├── NumberedTaskView.java │ │ ├── PrioritySortStrategy.java │ │ ├── Task.java │ │ └── UnorderedStrategy.java ├── 22.Interpreter │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── interpreter │ │ └── solution1 │ │ ├── ConstantExpression.java │ │ ├── Context.java │ │ ├── Driver.java │ │ ├── INumericExpression.java │ │ ├── MultiplicationExpression.java │ │ ├── SubstrractionExpression.java │ │ ├── SumExpression.java │ │ └── VariableExpression.java ├── 23.Builder │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ ├── builder │ │ ├── solution1 │ │ │ ├── Driver.java │ │ │ └── House.java │ │ ├── solution2 │ │ │ ├── Driver.java │ │ │ └── House.java │ │ └── solution3 │ │ │ ├── Builder.java │ │ │ ├── Driver.java │ │ │ └── House.java │ │ └── gofbuilder │ │ └── solution4 │ │ ├── Builder.java │ │ ├── Driver.java │ │ ├── Engineer.java │ │ ├── House.java │ │ └── IBuilder.java ├── 3.Strategy │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── strategy │ │ ├── solution1 │ │ ├── SortDriver.java │ │ └── Sorter.java │ │ ├── solution2 │ │ ├── BubbleSortingAlgorithm.java │ │ ├── ISortAlgorithm.java │ │ ├── MergeSortAlgorithm.java │ │ ├── QuickSortAlgorithm.java │ │ ├── SortDriver.java │ │ └── Sorter.java │ │ └── soluton3 │ │ ├── AscendingComparator.java │ │ ├── BubbleSortingAlgorithm.java │ │ ├── IComparator.java │ │ ├── ISortAlgorithm.java │ │ ├── MergeSortAlgorithm.java │ │ ├── QuickSortAlgorithm.java │ │ ├── SortDriver.java │ │ └── Sorter.java ├── 4.Observer │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── observer │ │ ├── solution1 │ │ ├── CurrentConditionsDisplay.java │ │ ├── Driver.java │ │ ├── ForecastDisplay.java │ │ ├── StatisticsDisplay.java │ │ ├── Weather.java │ │ └── WeatherData.java │ │ └── solution2 │ │ ├── CurrentConditionsDisplay.java │ │ ├── Driver.java │ │ ├── ForecastDisplay.java │ │ ├── IObserver.java │ │ ├── StatisticsDisplay.java │ │ ├── Weather.java │ │ └── WeatherData.java ├── 5.Iterator │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── iterator │ │ ├── solution1 │ │ ├── BreakfastMenu.java │ │ ├── DinnerMenu.java │ │ ├── Driver.java │ │ ├── Manager.java │ │ └── MenuItem.java │ │ └── solution2 │ │ ├── BreakfastMenu.java │ │ ├── BreakfastMenuIterator.java │ │ ├── DinnerMenu.java │ │ ├── DinnerMenuIterator.java │ │ ├── Driver.java │ │ ├── IMenu.java │ │ ├── Iterator.java │ │ ├── Manager.java │ │ └── MenuItem.java ├── 6.Decorator │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── decorator │ │ ├── solution1 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── CircleNutsCookie.java │ │ ├── CircleSprinklesCookie.java │ │ ├── Driver.java │ │ ├── SquareCookie.java │ │ ├── SquareNutsCookie.java │ │ └── SquareSprinklesCookie.java │ │ ├── solution2 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ └── SquareCookie.java │ │ ├── solution3 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ ├── NutsDecorator.java │ │ ├── SprinklesDecorator.java │ │ └── SquareCookie.java │ │ ├── solution4 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ ├── NutsDecorator.java │ │ ├── SprinklesDecorator.java │ │ └── SquareCookie.java │ │ └── solution5 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ ├── IDecorator.java │ │ ├── NutsDecorator.java │ │ ├── SprinklesDecorator.java │ │ └── SquareCookie.java ├── 7.Mediator │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ ├── mediatior │ │ └── solution1 │ │ │ ├── CEditBox.java │ │ │ ├── Driver.java │ │ │ ├── FEditBox.java │ │ │ ├── FRaiseButton.java │ │ │ ├── TempBar.java │ │ │ └── Utils.java │ │ └── mediator │ │ └── solution2 │ │ ├── AbstractMediator.java │ │ ├── CEditBox.java │ │ ├── Driver.java │ │ ├── FEditBox.java │ │ ├── FRaiseButton.java │ │ ├── IButton.java │ │ ├── IEditBox.java │ │ ├── IWidget.java │ │ ├── TempBar.java │ │ ├── TempDialogMediator.java │ │ └── Utils.java ├── 8.Facade │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── facade │ │ ├── solution1 │ │ ├── IInventoryService.java │ │ ├── IPaymentService.java │ │ ├── IShippingService.java │ │ ├── InventoryServiceImpl.java │ │ ├── MobileController.java │ │ ├── PaymentServiceImpl.java │ │ ├── Product.java │ │ ├── ShippingServiceImpl.java │ │ └── WebController.java │ │ └── solution2 │ │ ├── IInventoryService.java │ │ ├── IOrderFacade.java │ │ ├── IPaymentService.java │ │ ├── IShippingService.java │ │ ├── InventoryServiceImpl.java │ │ ├── MobileController.java │ │ ├── OrderFacadeImpl.java │ │ ├── PaymentDetails.java │ │ ├── PaymentServiceImpl.java │ │ ├── Product.java │ │ ├── ShippingServiceImpl.java │ │ └── WebController.java ├── 9.Command │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── command │ │ ├── solution1 │ │ ├── Driver.java │ │ └── Square.java │ │ ├── solution2 │ │ ├── AbstractOperation.java │ │ ├── Driver.java │ │ ├── Invoker.java │ │ ├── MoveOperation.java │ │ ├── ScaleOperation.java │ │ └── Square.java │ │ ├── solution3 │ │ ├── AbstractOperation.java │ │ ├── Driver.java │ │ ├── Invoker.java │ │ ├── MoveOperation.java │ │ ├── PrintOperation.java │ │ ├── ScaleOperation.java │ │ └── Square.java │ │ └── solution4 │ │ ├── AbstractOperation.java │ │ ├── Driver.java │ │ ├── Invoker.java │ │ ├── MoveOperation.java │ │ ├── PrintOperation.java │ │ ├── ScaleOperation.java │ │ └── Square.java ├── README.md └── assignments │ ├── Assignment1.pdf │ ├── Assignment2.pdf │ ├── Assignment3.pdf │ ├── Assignment4.pdf │ ├── Assignment5.pdf │ ├── Assignment6.pdf │ ├── Project1-FileExplorer.pdf │ └── Project2-MinePump control system.pdf ├── .gitattributes ├── .gitignore ├── 2017-april ├── 1.oo-in-reality │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── oo │ │ ├── encapsulation1 │ │ └── Circle.java │ │ ├── encapsulation2 │ │ ├── CoffeeRecipe.java │ │ ├── Recipe.java │ │ ├── TeaRecipe.java │ │ └── Test.java │ │ └── extensibility │ │ ├── IStack.java │ │ └── Test.java ├── 10.adapter-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project9 │ │ ├── solution1 │ │ ├── Driver.java │ │ ├── IStack.java │ │ └── LinkedStack.java │ │ └── solution2 │ │ ├── Driver.java │ │ ├── IStack.java │ │ └── LinkedStack.java ├── 11.singleton-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project10 │ │ └── solution1 │ │ ├── Account.java │ │ ├── Bank.java │ │ └── Driver.java ├── 12.factory-method pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project10 │ │ ├── solution1 │ │ ├── CacheFactory.java │ │ ├── DefaultCache.java │ │ ├── Driver.java │ │ ├── ICache.java │ │ ├── JCache.java │ │ └── TrieCache.java │ │ └── solution2 │ │ ├── CacheFactory1.java │ │ ├── DefaultCache.java │ │ ├── Driver.java │ │ ├── ICache.java │ │ ├── ICacheFactory.java │ │ ├── JCache.java │ │ └── TrieCache.java ├── 13.abstractfactory-builder │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project11 │ │ ├── solution1 │ │ ├── AudiCar.java │ │ ├── Driver.java │ │ ├── EGearBox.java │ │ ├── EStereo.java │ │ ├── EWheel.java │ │ ├── IGearBox.java │ │ ├── IStereo.java │ │ ├── IWheel.java │ │ ├── LGearBox.java │ │ ├── LStereo.java │ │ ├── LWheel.java │ │ ├── MGearBox.java │ │ ├── MStereo.java │ │ └── MWheel.java │ │ ├── solution2 │ │ ├── AudiCar.java │ │ ├── Driver.java │ │ ├── EGearBox.java │ │ ├── EStereo.java │ │ ├── EWheel.java │ │ ├── EconomyAudiBuilder.java │ │ ├── IGearBox.java │ │ ├── IStereo.java │ │ ├── IWheel.java │ │ ├── LGearBox.java │ │ ├── LStereo.java │ │ ├── LWheel.java │ │ ├── LuxuryAudiBuilder.java │ │ ├── MGearBox.java │ │ ├── MStereo.java │ │ ├── MWheel.java │ │ └── MediumAudiBuilder.java │ │ ├── solution3 │ │ ├── AbstractAudiBuilder.java │ │ ├── AudiCar.java │ │ ├── Driver.java │ │ ├── EGearBox.java │ │ ├── EStereo.java │ │ ├── EWheel.java │ │ ├── EconomyAudiBuilder.java │ │ ├── IGearBox.java │ │ ├── IStereo.java │ │ ├── IWheel.java │ │ ├── LGearBox.java │ │ ├── LStereo.java │ │ ├── LWheel.java │ │ ├── LuxuryAudiBuilder.java │ │ ├── MGearBox.java │ │ ├── MStereo.java │ │ ├── MWheel.java │ │ └── MediumAudiBuilder.java │ │ └── solution4 │ │ ├── AudiCar.java │ │ ├── Driver.java │ │ ├── EGearBox.java │ │ ├── EStereo.java │ │ ├── EWheel.java │ │ ├── EconomyCarFactory.java │ │ ├── ICarFactory.java │ │ ├── IGearBox.java │ │ ├── IStereo.java │ │ ├── IWheel.java │ │ ├── LGearBox.java │ │ ├── LStereo.java │ │ ├── LWheel.java │ │ ├── LuxuryCarFactory.java │ │ ├── MGearBox.java │ │ ├── MStereo.java │ │ ├── MWheel.java │ │ └── MediumCarFactory.java ├── 14.composite-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project12 │ │ ├── solution1 │ │ ├── Directory.java │ │ ├── Driver.java │ │ └── File.java │ │ └── solution2 │ │ ├── Directory.java │ │ ├── Driver.java │ │ ├── File.java │ │ └── Node.java ├── 15.visitor-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project13 │ │ ├── solution1 │ │ ├── Directory.java │ │ ├── Driver.java │ │ ├── File.java │ │ └── Node.java │ │ ├── solution2 │ │ ├── Directory.java │ │ ├── Driver.java │ │ ├── File.java │ │ ├── IVisitor.java │ │ ├── Node.java │ │ ├── SizeVisitor.java │ │ └── TraversalVisitor.java │ │ └── solution3 │ │ ├── Directory.java │ │ ├── Driver.java │ │ ├── File.java │ │ ├── IVisitor.java │ │ ├── Node.java │ │ ├── SizeVisitor.java │ │ └── TraversalVisitor.java ├── 16.chain-of-responsibility │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project14 │ │ ├── solution1 │ │ ├── AbstractHandler.java │ │ ├── CEO.java │ │ ├── Director.java │ │ ├── Driver.java │ │ ├── ExecutiveCommitte.java │ │ ├── PurchaseOrder.java │ │ ├── SeniorManager.java │ │ └── VP.java │ │ └── solution2 │ │ ├── AbstractHandler.java │ │ ├── CEO.java │ │ ├── Director.java │ │ ├── Driver.java │ │ ├── ExecutiveCommitte.java │ │ ├── PurchaseOrder.java │ │ ├── SeniorManager.java │ │ └── VP.java ├── 17.bridge-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project15 │ │ ├── solution1 │ │ ├── BulletView.java │ │ ├── Driver.java │ │ ├── DueDatebasedSortStrategy.java │ │ ├── ISortStrategy.java │ │ ├── IViewStrategy.java │ │ ├── ListView.java │ │ ├── NumberedView.java │ │ ├── PrioritybasedSortStrategy.java │ │ ├── TODOList.java │ │ ├── Task.java │ │ └── UnsortedStrategy.java │ │ └── solution2 │ │ ├── AbstractView.java │ │ ├── BulletView.java │ │ ├── Driver.java │ │ ├── DueDatebasedSortStrategy.java │ │ ├── ISortStrategy.java │ │ ├── IViewStrategy.java │ │ ├── ListView.java │ │ ├── NumberedView.java │ │ ├── PrioritybasedSortStrategy.java │ │ ├── Task.java │ │ └── UnsortedStrategy.java ├── 18.facade-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project20 │ │ ├── solution1 │ │ ├── Address.java │ │ ├── DBInventoryService.java │ │ ├── DesktopController.java │ │ ├── Driver.java │ │ ├── FedExShippingService.java │ │ ├── ICICIPaymentService.java │ │ ├── IInventoryService.java │ │ ├── IPaymentService.java │ │ ├── IShippingService.java │ │ ├── MobileController.java │ │ ├── PayPalPaymentService.java │ │ └── Product.java │ │ └── solution2 │ │ ├── Address.java │ │ ├── DBInventoryService.java │ │ ├── DesktopController.java │ │ ├── Driver.java │ │ ├── FedExShippingService.java │ │ ├── ICICIPaymentService.java │ │ ├── IInventoryService.java │ │ ├── IOrderFacade.java │ │ ├── IPaymentService.java │ │ ├── IShippingService.java │ │ ├── MobileController.java │ │ ├── OrderFacade1.java │ │ ├── PayPalPaymentService.java │ │ └── Product.java ├── 19.proxy-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project16 │ │ ├── solution1 │ │ ├── Document.java │ │ ├── Driver.java │ │ └── MyImage.java │ │ └── solution2 │ │ ├── Document.java │ │ ├── Driver.java │ │ ├── IProxy.java │ │ ├── MyImage.java │ │ └── MyImageProxy.java ├── 2.template-method-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project1 │ │ ├── solution1 │ │ ├── CoffeeRecipe.java │ │ ├── TeaRecipe.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── CoffeeRecipe.java │ │ ├── Recipe.java │ │ ├── TeaRecipe.java │ │ └── Test.java │ │ ├── solution3 │ │ ├── CoffeeRecipe.java │ │ ├── Recipe.java │ │ ├── TeaRecipe.java │ │ └── Test.java │ │ └── solution4 │ │ ├── CoffeeRecipe.java │ │ ├── Recipe.java │ │ ├── TeaRecipe.java │ │ └── Test.java ├── 20.prototype-pattern │ └── src │ │ ├── Book.java │ │ ├── Driver.java │ │ ├── Dvd.java │ │ ├── Product.java │ │ ├── ShoppingCart.java │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project17 │ │ └── solutio2 │ │ ├── Book.java │ │ ├── BookFactory.java │ │ ├── Driver.java │ │ ├── Dvd.java │ │ ├── DvdFactory.java │ │ ├── Product.java │ │ ├── ProductFactory.java │ │ └── ShoppingCart.java ├── 3.state-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project2 │ │ ├── solution1 │ │ ├── GumballMachine.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── GumballMachine.java │ │ ├── GumballsCoin.java │ │ ├── GumballsNoCoin.java │ │ ├── IState.java │ │ ├── NoGumballsCoin.java │ │ ├── NoGumballsNoCoin.java │ │ └── Test.java │ │ └── solution3 │ │ ├── GumballMachine.java │ │ ├── GumballsCoin.java │ │ ├── GumballsNoCoin.java │ │ ├── IState.java │ │ ├── NoGumballsCoin.java │ │ ├── NoGumballsNoCoin.java │ │ └── Test.java ├── 4.strategy-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project3 │ │ ├── solution1 │ │ ├── Sorter.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── BubbleSorter.java │ │ ├── MergeSorter.java │ │ ├── QucikSort.java │ │ ├── Sorter.java │ │ └── Test.java │ │ ├── solution3 │ │ ├── AScMergeSorter.java │ │ ├── AscBubbleSorter.java │ │ ├── DescBubbleSorter.java │ │ ├── DescMergeSorter.java │ │ ├── Sorter.java │ │ └── Test.java │ │ ├── solution4 │ │ ├── BubbleSortAlgorithm.java │ │ ├── ISortAlgorithm.java │ │ ├── MergeSortAlgorithm.java │ │ ├── Sorter.java │ │ └── Test.java │ │ └── soluton5 │ │ ├── AscComparator.java │ │ ├── BubbleSortAlgorithm.java │ │ ├── IComparator.java │ │ ├── ISortAlgorithm.java │ │ ├── MergeSortAlgorithm.java │ │ ├── Sorter.java │ │ └── Test.java ├── 5.observer-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project4 │ │ ├── solution1 │ │ ├── CurrentCondtionsDisplay.java │ │ ├── ForecastDisplay.java │ │ ├── StatisticsDisplay.java │ │ ├── Test.java │ │ ├── Weather.java │ │ └── WeatherStation.java │ │ └── solution2 │ │ ├── CurrentCondtionsDisplay.java │ │ ├── ForecastDisplay.java │ │ ├── IDisplay.java │ │ ├── StatisticsDisplay.java │ │ ├── Test.java │ │ ├── Weather.java │ │ └── WeatherStation.java ├── 6.mediator-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project5 │ │ ├── solution1 │ │ ├── CEditBox.java │ │ ├── CLowerButton.java │ │ ├── CRaiseButton.java │ │ ├── Driver.java │ │ ├── FEditBox.java │ │ ├── FLowerButton.java │ │ ├── FRaiseButton.java │ │ ├── TempBar.java │ │ └── Utils.java │ │ ├── solution2 │ │ ├── CEditBox.java │ │ ├── CLowerButton.java │ │ ├── CRaiseButton.java │ │ ├── Driver.java │ │ ├── FEditBox.java │ │ ├── FLowerButton.java │ │ ├── FRaiseButton.java │ │ ├── IButton.java │ │ ├── IEditBox.java │ │ ├── IMediator.java │ │ ├── TempBar.java │ │ ├── TempDialogMediator.java │ │ └── Utils.java │ │ └── solution3 │ │ ├── CEditBox.java │ │ ├── CLowerButton.java │ │ ├── CRaiseButton.java │ │ ├── Driver.java │ │ ├── FEditBox.java │ │ ├── FLowerButton.java │ │ ├── FRaiseButton.java │ │ ├── IMediator.java │ │ ├── IWidget.java │ │ ├── TempBar.java │ │ ├── TempDialogMediator.java │ │ └── Utils.java ├── 7.decorator-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project6 │ │ ├── solution1 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ ├── NutsCircleCookie.java │ │ ├── NutsSquareCookie.java │ │ └── SquareCookie.java │ │ ├── solution2 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ └── SquareCookie.java │ │ ├── solution3 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ ├── ICookie.java │ │ ├── NutsDecorator.java │ │ ├── SprinklesDecorator.java │ │ └── SquareCookie.java │ │ ├── solution4 │ │ ├── AbstractCookie.java │ │ ├── AbstractDecorator.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ ├── ICookie.java │ │ ├── NutsDecorator.java │ │ ├── SprinklesDecorator.java │ │ └── SquareCookie.java │ │ └── solution5 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── Driver.java │ │ ├── ICookie.java │ │ ├── IDecorator.java │ │ ├── NutsDecorator.java │ │ ├── SprinklesDecorator.java │ │ └── SquareCookie.java ├── 8.command-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project7 │ │ ├── solution1 │ │ ├── Driver.java │ │ └── Square.java │ │ ├── solution2 │ │ ├── AbstractCommand.java │ │ ├── Driver.java │ │ ├── Invoker.java │ │ ├── MoveCommand.java │ │ ├── ScaleCommand.java │ │ └── Square.java │ │ ├── solution3 │ │ ├── AbstractCommand.java │ │ ├── Driver.java │ │ ├── Invoker.java │ │ ├── MoveCommand.java │ │ ├── ScaleCommand.java │ │ └── Square.java │ │ ├── solution4 │ │ ├── AbstractCommand.java │ │ ├── Driver.java │ │ ├── Invoker.java │ │ ├── MoveCommand.java │ │ ├── PrintCommand.java │ │ ├── ScaleCommand.java │ │ └── Square.java │ │ └── solution5 │ │ ├── AbstractCommand.java │ │ ├── Driver.java │ │ ├── Invoker.java │ │ ├── MoveCommand.java │ │ ├── PrintCommand.java │ │ ├── ScaleCommand.java │ │ └── Square.java ├── 9.iterator-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── dp │ │ └── project8 │ │ ├── solution1 │ │ ├── BreakfastUnit.java │ │ ├── DinnerUnit.java │ │ ├── Driver.java │ │ └── MenuItem.java │ │ ├── solution2 │ │ ├── BreakfastUnit.java │ │ ├── DinnerUnit.java │ │ ├── Driver.java │ │ ├── Iterator.java │ │ └── MenuItem.java │ │ └── solution3 │ │ ├── BreakfastUnit.java │ │ ├── DinnerUnit.java │ │ ├── Driver.java │ │ ├── Iterator.java │ │ └── MenuItem.java └── assignments │ ├── Assignment1(template method, state).pdf │ ├── Assignment2(observer, strategy).pdf │ ├── Assignment3(mediator,decorator).pdf │ ├── Assignment4(command, iterator).pdf │ ├── Assignment5(design choices).pdf │ └── Assignment6(composite, visitor, iterator).pdf ├── 2019-aug ├── 1.oo-concepts │ └── src │ │ └── com │ │ └── alg │ │ └── design │ │ ├── abstraction │ │ └── SalesPerson.java │ │ └── encapsulation │ │ ├── ArrayStack.java │ │ ├── IStack.java │ │ ├── LinkedStack.java │ │ ├── SalesPerson.java │ │ └── TestStack.java ├── 10.adapter-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── IStack.java │ │ ├── LinkedStack.java │ │ └── Test.java │ │ └── solution2 │ │ ├── IStack.java │ │ ├── LinkedStack.java │ │ └── Test.java ├── 11.command-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution11 │ │ ├── Square.java │ │ └── Test.java │ │ ├── solution12 │ │ ├── AbstractCommand.java │ │ ├── CommandManager.java │ │ ├── MoveCommand.java │ │ ├── ScaleCommand.java │ │ ├── Square.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── AbstractCommand.java │ │ ├── CommandManager.java │ │ ├── MoveCommand.java │ │ ├── Rectangle.java │ │ ├── ScaleCommand.java │ │ ├── Square.java │ │ └── Test.java │ │ ├── solution3 │ │ ├── AbstractCommand.java │ │ ├── CommandManager.java │ │ ├── IShape.java │ │ ├── MoveCommand.java │ │ ├── Rectangle.java │ │ ├── RotateCommand.java │ │ ├── ScaleCommand.java │ │ ├── Square.java │ │ └── Test.java │ │ └── solution4 │ │ ├── AbstractCommand.java │ │ ├── CommandManager.java │ │ ├── IShape.java │ │ ├── MoveCommand.java │ │ ├── Rectangle.java │ │ ├── RotateCommand.java │ │ ├── ScaleCommand.java │ │ ├── Square.java │ │ └── Test.java ├── 12.chain of responsibility pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── AbstractRole.java │ │ ├── CEO.java │ │ ├── Director.java │ │ ├── ExecutiveCommittee.java │ │ ├── Main.java │ │ ├── PurchaseOrder.java │ │ ├── SeniorManager.java │ │ └── VicePresident.java │ │ ├── solution2 │ │ ├── AbstractRole.java │ │ ├── CEO.java │ │ ├── Director.java │ │ ├── ExecutiveCommittee.java │ │ ├── Main.java │ │ ├── PurchaseOrder.java │ │ ├── SeniorManager.java │ │ └── VicePresident.java │ │ └── solution3 │ │ ├── AbstractRole.java │ │ ├── CEO.java │ │ ├── Director.java │ │ ├── ExecutiveCommittee.java │ │ ├── Main.java │ │ ├── PurchaseOrder.java │ │ ├── SeniorManager.java │ │ └── VicePresident.java ├── 13.proxy-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── Document.java │ │ ├── MyImage.java │ │ └── Test.java │ │ └── solution2 │ │ ├── Document.java │ │ ├── IImageProxy.java │ │ ├── MyImage.java │ │ ├── MyImageProxy.java │ │ └── Test.java ├── 14.abstract factory pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── AlloyWheels.java │ │ ├── AudiCar.java │ │ ├── Automatic.java │ │ ├── Hybrid.java │ │ ├── IGearBox.java │ │ ├── IWheels.java │ │ ├── Manual.java │ │ ├── StandardWheels.java │ │ └── Test.java │ │ └── solution2 │ │ ├── AlloyWheels.java │ │ ├── AudiCar.java │ │ ├── Automatic.java │ │ ├── EconomyFactory.java │ │ ├── Hybrid.java │ │ ├── IFactory.java │ │ ├── IGearBox.java │ │ ├── IWheels.java │ │ ├── LuxuryFactory.java │ │ ├── Manual.java │ │ ├── MediumFactory.java │ │ ├── StandardWheels.java │ │ └── Test.java ├── 15.simple factory method pattern │ └── dummy ├── 16.bridge pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ └── solution1 │ │ ├── AbstractSmartConnection.java │ │ ├── Factory.java │ │ ├── IConnection.java │ │ ├── MySqlConnection.java │ │ ├── OracleConnection.java │ │ ├── PersistentConnection.java │ │ ├── PooledConnection.java │ │ └── Test.java ├── 2.template-method │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── Coffee.java │ │ ├── Tea.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── Coffee.java │ │ ├── Recipe.java │ │ ├── Tea.java │ │ └── Test.java │ │ ├── solution3 │ │ ├── Coffee.java │ │ ├── Recipe.java │ │ ├── Tea.java │ │ └── Test.java │ │ └── solution4 │ │ ├── Coffee.java │ │ ├── Recipe.java │ │ ├── Tea.java │ │ └── Test.java ├── 3.state-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── GumballMachine.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── GumballMachine.java │ │ ├── GumballsCoin.java │ │ ├── GumballsNoCoin.java │ │ ├── IState.java │ │ ├── NoGumballsCoin.java │ │ ├── NoGumballsNoCoin.java │ │ └── Test.java │ │ └── solution3 │ │ ├── GumballMachine.java │ │ ├── GumballsCoin.java │ │ ├── GumballsNoCoin.java │ │ ├── IGumballMachine.java │ │ ├── IState.java │ │ ├── NoGumballsCoin.java │ │ ├── NoGumballsNoCoin.java │ │ └── Test.java ├── 4.iterator pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── BreakfastMenu.java │ │ ├── DinnerMenu.java │ │ ├── MenuItem.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── BreakfastMenu.java │ │ ├── DinnerMenu.java │ │ ├── Iterator.java │ │ ├── MenuItem.java │ │ └── Test.java │ │ ├── solution31 │ │ ├── BreakfastMenu.java │ │ ├── DinnerMenu.java │ │ ├── Iterator.java │ │ ├── MenuItem.java │ │ └── Test.java │ │ └── solution32 │ │ ├── BreakfastMenu.java │ │ ├── DinnerMenu.java │ │ ├── Iterator.java │ │ ├── MenuItem.java │ │ └── Test.java ├── 5.strategy-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── IntegerSorter.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── BubbleIntegerrSorter.java │ │ ├── IntegerSorter.java │ │ ├── MergeIntegerSorter.java │ │ └── Test.java │ │ ├── solution3 │ │ ├── AscBubbleIntegerrSorter.java │ │ ├── AscMergeIntegerSorter.java │ │ ├── DescBubbleIntegerrSorter.java │ │ ├── DescMergeIntegerSorter.java │ │ ├── IntegerSorter.java │ │ └── Test.java │ │ └── solution4 │ │ ├── AscCmpStrateggy.java │ │ ├── BubbleSortStrategy.java │ │ ├── DescCmpStrategy.java │ │ ├── ICompareStrategy.java │ │ ├── ISortStrategy.java │ │ ├── IntegerSorter.java │ │ ├── MergeSortStrategy.java │ │ └── Test.java ├── 6.observer pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── CurrentConditionsDisplay.java │ │ ├── ForecastDisplay.java │ │ ├── StatisticsDisplay.java │ │ ├── Test.java │ │ ├── Weather.java │ │ └── WeatherStation.java │ │ └── solution2 │ │ ├── CurrentConditionsDisplay.java │ │ ├── ForecastDisplay.java │ │ ├── IDisplay.java │ │ ├── StatisticsDisplay.java │ │ ├── Test.java │ │ ├── Weather.java │ │ └── WeatherStation.java ├── 7.mediator pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── CEditBox.java │ │ ├── CLowerButton.java │ │ ├── CRaiseButton.java │ │ ├── Driver.java │ │ ├── FEditBox.java │ │ ├── FLowerButton.java │ │ ├── FRaiseButton.java │ │ ├── TempBar.java │ │ └── Utils.java │ │ └── solution2 │ │ ├── CEditBox.java │ │ ├── CLowerButton.java │ │ ├── CRaiseButton.java │ │ ├── Driver.java │ │ ├── FEditBox.java │ │ ├── FLowerButton.java │ │ ├── FRaiseButton.java │ │ ├── IButton.java │ │ ├── IEditBox.java │ │ ├── IMediator.java │ │ ├── TempBar.java │ │ ├── TempDialogMediator.java │ │ └── Utils.java ├── 8.composite-visitor patterns │ └── src │ │ └── alg │ │ └── oodesign │ │ ├── solution1 │ │ ├── AbstractItem.java │ │ ├── Book.java │ │ ├── Box.java │ │ ├── Letter.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── AbstractItem.java │ │ ├── Book.java │ │ ├── Box.java │ │ ├── Letter.java │ │ └── Test.java │ │ ├── solution3 │ │ ├── AbstractItem.java │ │ ├── Book.java │ │ ├── Box.java │ │ ├── IVisitor.java │ │ ├── Letter.java │ │ ├── Test.java │ │ └── WeightVisitor.java │ │ └── solution4 │ │ ├── AbstractItem.java │ │ ├── Book.java │ │ ├── Box.java │ │ ├── IVisitor.java │ │ ├── Letter.java │ │ ├── Test.java │ │ └── WeightVisitor.java ├── 9.decorator-pattern │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ ├── solution0 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── SquareCookie.java │ │ └── Test.java │ │ ├── solution1 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── NutsCircleCookie.java │ │ ├── SprinklesCircleCookie.java │ │ ├── SquareCookie.java │ │ └── Test.java │ │ ├── solution2 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── NutsDecoratorCookie.java │ │ ├── SprinklesDecoratorCookie.java │ │ ├── SquareCookie.java │ │ └── Test.java │ │ ├── solution3 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── ICookie.java │ │ ├── NutsDecoratorCookie.java │ │ ├── SprinklesDecoratorCookie.java │ │ ├── SquareCookie.java │ │ └── Test.java │ │ └── solution4 │ │ ├── AbstractCookie.java │ │ ├── CircleCookie.java │ │ ├── IDecorator.java │ │ ├── NutsDecorator.java │ │ ├── SprinklesDecorator.java │ │ ├── SquareCookie.java │ │ └── Test.java ├── assignments │ ├── Assignment1(template, state).pdf │ ├── Assignment2(strategy, iterator).pdf │ ├── Assignment3(observer, mediator).pdf │ ├── Assignment4(composite, visitor, iterator).pdf │ ├── Assignment5(decorator, adapter).pdf │ ├── Assignment6(theory questions).pdf │ ├── Project1-Snake Ladder Game.pdf │ └── Project2-Editor.pdf ├── simple notepad design │ └── src │ │ └── com │ │ └── alg │ │ └── oodesign │ │ └── editor │ │ ├── model │ │ ├── AbstractCommand.java │ │ ├── BufferManager.java │ │ ├── Clipboard.java │ │ ├── CommandManager.java │ │ ├── CopyCommand.java │ │ ├── CutCommand.java │ │ ├── DeleteCommand.java │ │ ├── InsertCommand.java │ │ ├── OpenCommand.java │ │ ├── PasteCommand.java │ │ └── SaveCommand.java │ │ └── view │ │ ├── CommandLine.java │ │ └── NotepadGUI.java ├── snake-ladder game design │ ├── board6x6.jpg │ └── src │ │ └── com │ │ └── design │ │ └── snakeladders │ │ └── solution1 │ │ ├── controller │ │ └── Controller.java │ │ ├── model │ │ ├── Board.java │ │ ├── BoardBuilder.java │ │ ├── Cell.java │ │ ├── Die.java │ │ ├── Game.java │ │ └── Player.java │ │ ├── test │ │ ├── TestCommandLine.java │ │ └── TestGUI.java │ │ └── view │ │ ├── GUI.java │ │ └── GameView.java └── windows application design │ ├── board6x6.jpg │ └── src │ └── com │ └── design │ └── snakeladders │ └── solution1 │ ├── controller │ └── Controller.java │ ├── model │ ├── Board.java │ ├── BoardBuilder.java │ ├── Cell.java │ ├── Die.java │ ├── Game.java │ └── Player.java │ ├── test │ ├── TestCommandLine.java │ └── TestGUI.java │ └── view │ ├── GUI.java │ └── GameView.java └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /2016/1.TemplateMethod/src/com/alg/dp/tm/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.tm.solution1; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | CoffeeRecipe cr = new CoffeeRecipe(); 7 | cr.makeRecipe(); 8 | 9 | TeaRecipe tr = new TeaRecipe(); 10 | tr.makeRecipe(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/1.TemplateMethod/src/com/alg/dp/tm/solution2/AbstractRecipe.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.tm.solution2; 2 | 3 | public class AbstractRecipe { 4 | 5 | protected void boilWater() { 6 | System.out.println("Boiling water"); 7 | } 8 | 9 | protected void pourInCup() { 10 | System.out.println("Pouring in cup"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/1.TemplateMethod/src/com/alg/dp/tm/solution2/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.tm.solution2; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | CoffeeRecipe cr = new CoffeeRecipe(); 7 | cr.makeRecipe(); 8 | 9 | TeaRecipe tr = new TeaRecipe(); 10 | tr.makeRecipe(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/1.TemplateMethod/src/com/alg/dp/tm/solution2/TeaRecipe.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.tm.solution2; 2 | 3 | public class TeaRecipe extends AbstractRecipe { 4 | 5 | private void steepTea() { 6 | System.out.println("Steeping Tea"); 7 | } 8 | 9 | private void addLemon() { 10 | System.out.println("Adding Lemon"); 11 | } 12 | public void makeRecipe() { 13 | boilWater(); 14 | steepTea(); 15 | pourInCup(); 16 | addLemon(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2016/1.TemplateMethod/src/com/alg/dp/tm/solution3/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.tm.solution3; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | CoffeeRecipe cr = new CoffeeRecipe(); 7 | cr.makeRecipe(); 8 | 9 | TeaRecipe tr = new TeaRecipe(); 10 | tr.makeRecipe(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/1.TemplateMethod/src/com/alg/dp/tm/solution4/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.tm.solution4; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | CoffeeRecipe cr = new CoffeeRecipe(); 7 | cr.makeRecipe(true); 8 | cr.makeRecipe(false); 9 | 10 | TeaRecipe tr = new TeaRecipe(); 11 | tr.makeRecipe(true); 12 | tr.makeRecipe(false); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/10.Singleton/src/com/alg/dp/singleton/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.singleton; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | Clipboard cb = Clipboard.getInstance(); 7 | cb.setData("abc"); 8 | System.out.println(cb.getData()); 9 | 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution1/ICache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution1; 2 | 3 | public interface ICache { 4 | void put(String key, Integer value); 5 | Integer get(String key); 6 | } 7 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution1/JCache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution1; 2 | 3 | public class JCache implements ICache { 4 | 5 | @Override 6 | public void put(String key, Integer value) { 7 | System.out.println("Key - value are added to jcache"); 8 | 9 | 10 | } 11 | 12 | @Override 13 | public Integer get(String key) { 14 | System.out.println("The value is retrieved using jcache"); 15 | return null; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution1/TrieCache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution1; 2 | 3 | public class TrieCache implements ICache { 4 | 5 | @Override 6 | public void put(String key, Integer value) { 7 | System.out.println("Key - value are added to trie cache"); 8 | 9 | 10 | } 11 | 12 | @Override 13 | public Integer get(String key) { 14 | System.out.println("The value is retrieved using trie cache"); 15 | return null; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution2/CacheFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution2; 2 | 3 | public class CacheFactory { 4 | 5 | public static ICache createCache(int maxobj) { 6 | ICache cache; 7 | if(maxobj < 200) 8 | cache = new DefaultCache(); 9 | else if(maxobj < 1000) 10 | cache = new JCache(); 11 | else 12 | cache = new TrieCache(); 13 | return cache; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution2/Client.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution2; 2 | 3 | public class Client { 4 | 5 | 6 | public static void main(String[] args) { 7 | int maxobj = Integer.parseInt(args[0]); 8 | ICache cache = CacheFactory.createCache(maxobj); 9 | 10 | cache.put("e1",200); 11 | cache.put("e2",500); 12 | System.out.println(cache.get("e1")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution2/ICache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution2; 2 | 3 | public interface ICache { 4 | void put(String key, Integer value); 5 | Integer get(String key); 6 | } 7 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution2/JCache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution2; 2 | 3 | public class JCache implements ICache { 4 | 5 | @Override 6 | public void put(String key, Integer value) { 7 | System.out.println("Key - value are added to jcache"); 8 | 9 | 10 | } 11 | 12 | @Override 13 | public Integer get(String key) { 14 | System.out.println("The value is retrieved using jcache"); 15 | return null; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution2/TrieCache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution2; 2 | 3 | public class TrieCache implements ICache { 4 | 5 | @Override 6 | public void put(String key, Integer value) { 7 | System.out.println("Key - value are added to trie cache"); 8 | 9 | 10 | } 11 | 12 | @Override 13 | public Integer get(String key) { 14 | System.out.println("The value is retrieved using trie cache"); 15 | return null; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution3/CacheFactory1.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution3; 2 | 3 | public class CacheFactory1 implements ICacheFactory { 4 | 5 | public ICache createCache(int maxobj) { 6 | ICache cache; 7 | if(maxobj < 200) 8 | cache = new DefaultCache(); 9 | else if(maxobj < 1000) 10 | cache = new JCache(); 11 | else 12 | cache = new TrieCache(); 13 | return cache; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution3/ICache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution3; 2 | 3 | public interface ICache { 4 | void put(String key, Integer value); 5 | Integer get(String key); 6 | } 7 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution3/ICacheFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution3; 2 | 3 | public interface ICacheFactory { 4 | ICache createCache(int max); 5 | } 6 | -------------------------------------------------------------------------------- /2016/11.FactoryMethod/src/com/alg/dp/fm/solution3/JCache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fm.solution3; 2 | 3 | public class JCache implements ICache { 4 | 5 | @Override 6 | public void put(String key, Integer value) { 7 | System.out.println("Key - value are added to jcache"); 8 | 9 | 10 | } 11 | 12 | @Override 13 | public Integer get(String key) { 14 | System.out.println("The value is retrieved using jcache"); 15 | return null; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | AudiCar ecar1 = new AudiCar(); 7 | ecar1.setChasis(new EChasis()); 8 | ecar1.setGearbox(new EGearbox()); 9 | ecar1.setStereo(new EStereo()); 10 | ecar1.display(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/EChasis.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class EChasis implements IChasis { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Economy chasis"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/EGearbox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class EGearbox implements IGearbox { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Economy gear box"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/EStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class EStereo implements IStereo { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Economy stereo"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/IChasis.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public interface IChasis { 4 | String getDescription(); 5 | } 6 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/IGearbox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public interface IGearbox { 4 | String getDescription(); 5 | 6 | } 7 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/IStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public interface IStereo { 4 | String getDescription(); 5 | } 6 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/LChasis.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class LChasis implements IChasis { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Luxury Chasis"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/LGearbox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class LGearbox implements IGearbox { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Luxury gear box"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/LStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class LStereo implements IStereo { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Luxury stereo"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/MChasis.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class MChasis implements IChasis { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Medium chasis"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/MGearbox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class MGearbox implements IGearbox { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Medium gear box"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution1/MStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution1; 2 | 3 | public class MStereo implements IStereo { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Medium stereo"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | ICarFactory carFactory = new AudiEconomyCarFactory(); 7 | AudiCar ecar1 = new AudiCar(carFactory); 8 | ecar1.makeCar(); 9 | ecar1.display(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/EChasis.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class EChasis implements IChasis { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Economy chasis"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/EGearbox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class EGearbox implements IGearbox { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Economy gear box"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/EStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class EStereo implements IStereo { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Economy stereo"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/ICarFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public interface ICarFactory { 4 | IChasis createChasis(); 5 | IGearbox createGearBox(); 6 | IStereo createStereo(); 7 | } 8 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/IChasis.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public interface IChasis { 4 | String getDescription(); 5 | } 6 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/IGearbox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public interface IGearbox { 4 | String getDescription(); 5 | 6 | } 7 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/IStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public interface IStereo { 4 | String getDescription(); 5 | } 6 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/LChasis.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class LChasis implements IChasis { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Luxury Chasis"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/LGearbox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class LGearbox implements IGearbox { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Luxury gear box"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/LStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class LStereo implements IStereo { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Luxury stereo"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/MChasis.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class MChasis implements IChasis { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Medium chasis"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/MGearbox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class MGearbox implements IGearbox { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Medium gear box"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/12.AbstractFactory/src/com/alg/dp/af/solution2/MStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.af.solution2; 2 | 3 | public class MStereo implements IStereo { 4 | 5 | @Override 6 | public String getDescription() { 7 | // TODO Auto-generated method stub 8 | return "Medium stereo"; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/14.Visitor/src/com/alg/dp/visitor/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.visitor.solution1; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | IMailClient omc = new OperaMailClient(); 7 | omc.configureWindows(); 8 | omc.send(new EmailDetails()); 9 | 10 | omc.configureMac(); 11 | omc.send(new EmailDetails()); 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/14.Visitor/src/com/alg/dp/visitor/solution1/EmailDetails.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.visitor.solution1; 2 | 3 | public class EmailDetails { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2016/14.Visitor/src/com/alg/dp/visitor/solution1/IMailClient.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.visitor.solution1; 2 | 3 | public interface IMailClient { 4 | 5 | void configureWindows(); 6 | void configureMac(); 7 | void send(EmailDetails email); 8 | EmailDetails receive(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/14.Visitor/src/com/alg/dp/visitor/solution2/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.visitor.solution2; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | OperaMailClient omc = new OperaMailClient(); 7 | IVisitor wcv = new WinConfigurationVisitor(); 8 | omc.accept(wcv); 9 | wcv.visit(omc); 10 | 11 | IVisitor mcv = new MacConfigurationVisitor(); 12 | omc.accept(mcv); 13 | mcv.visit(omc); 14 | 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2016/14.Visitor/src/com/alg/dp/visitor/solution2/EmailDetails.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.visitor.solution2; 2 | 3 | public class EmailDetails { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2016/14.Visitor/src/com/alg/dp/visitor/solution2/IMailClient.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.visitor.solution2; 2 | 3 | public interface IMailClient { 4 | 5 | void accept(IVisitor visitor); 6 | void send(EmailDetails email); 7 | EmailDetails receive(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2016/14.Visitor/src/com/alg/dp/visitor/solution2/IVisitor.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.visitor.solution2; 2 | 3 | public interface IVisitor { 4 | 5 | void visit(OperaMailClient omc); 6 | void visit(SquirrelMailClient smc); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /2016/15.Prototype/src/com/alg/dp/prototype/solution1/Client.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.prototype.solution1; 2 | 3 | public class Client { 4 | 5 | 6 | public static void main(String[] args) { 7 | int maxobj = Integer.parseInt(args[0]); 8 | ICache cache = CacheFactory.createCache(maxobj); 9 | 10 | cache.put("e1",200); 11 | cache.put("e2",500); 12 | System.out.println(cache.get("e1")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/15.Prototype/src/com/alg/dp/prototype/solution1/ICache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.prototype.solution1; 2 | 3 | public interface ICache { 4 | void put(String key, Integer value); 5 | Integer get(String key); 6 | ICache cloneCache(); 7 | } 8 | -------------------------------------------------------------------------------- /2016/16.Adapter/src/com/alg/dp/adapter/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.adapter.solution1; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | IStack stack1 = new StackAdapter(); 7 | stack1.push(10); 8 | stack1.push(20); 9 | stack1.display(); 10 | 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/16.Adapter/src/com/alg/dp/adapter/solution1/IList.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.adapter.solution1; 2 | 3 | public interface IList { 4 | void add(int ind, Integer e); 5 | Integer get(int ind); 6 | void remove(int ind); 7 | void print(); 8 | } 9 | -------------------------------------------------------------------------------- /2016/16.Adapter/src/com/alg/dp/adapter/solution1/IStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.adapter.solution1; 2 | 3 | public interface IStack { 4 | void push(Integer e); 5 | Integer pop(); 6 | Integer top(); 7 | void display(); 8 | } 9 | -------------------------------------------------------------------------------- /2016/16.Adapter/src/com/alg/dp/adapter/solution2/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.adapter.solution2; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | IStack stack1 = new StackAdapter(); 7 | stack1.push(10); 8 | stack1.push(20); 9 | stack1.display(); 10 | 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/16.Adapter/src/com/alg/dp/adapter/solution2/IList.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.adapter.solution2; 2 | 3 | public interface IList { 4 | void add(int ind, Integer e); 5 | Integer get(int ind); 6 | void remove(int ind); 7 | void print(); 8 | } 9 | -------------------------------------------------------------------------------- /2016/16.Adapter/src/com/alg/dp/adapter/solution2/IStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.adapter.solution2; 2 | 3 | public interface IStack { 4 | void push(Integer e); 5 | Integer pop(); 6 | Integer top(); 7 | void display(); 8 | } 9 | -------------------------------------------------------------------------------- /2016/17.Flyweight/src/com/alg/dp/fw/solution3/FlyWeightFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.fw.solution3; 2 | 3 | import java.util.HashMap; 4 | 5 | public class FlyWeightFactory { 6 | private static HashMap digits = new HashMap(); 7 | 8 | public static Digit getFlyWeight(int key) { 9 | if(! digits.containsKey(key)) 10 | digits.put(key, new Digit(key)); 11 | return digits.get(key); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution1/CEO.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution1; 2 | 3 | public class CEO extends AbstractRole { 4 | 5 | public CEO(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "CEO"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution1/Director.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution1; 2 | 3 | public class Director extends AbstractRole { 4 | 5 | public Director(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "Director"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution1/ExecutiveComitte.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution1; 2 | 3 | public class ExecutiveComitte extends AbstractRole { 4 | 5 | public ExecutiveComitte(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "Executive comitte"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution1/SeniorManager.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution1; 2 | 3 | public class SeniorManager extends AbstractRole { 4 | 5 | public SeniorManager(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "Senior Manager"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution1/VP.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution1; 2 | 3 | public class VP extends AbstractRole { 4 | 5 | public VP(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "VP"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution2/CEO.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution2; 2 | 3 | public class CEO extends AbstractRole { 4 | 5 | public CEO(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "CEO"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution2/Director.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution2; 2 | 3 | public class Director extends AbstractRole { 4 | 5 | public Director(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "Director"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution2/ExecutiveComitte.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution2; 2 | 3 | public class ExecutiveComitte extends AbstractRole { 4 | 5 | public ExecutiveComitte(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "Executive comitte"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution2/SeniorManager.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution2; 2 | 3 | public class SeniorManager extends AbstractRole { 4 | 5 | public SeniorManager(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "Senior Manager"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/18.ChainOfResponsibility/src/com/alg/dp/cor/solution2/VP.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.cor.solution2; 2 | 3 | public class VP extends AbstractRole { 4 | 5 | public VP(int id, float maxLimit) { 6 | super(id, maxLimit); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | @Override 11 | public String getRole() { 12 | // TODO Auto-generated method stub 13 | return "VP"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/2.State/src/com/alg/dp/sp/solution2/IState.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.sp.solution2; 2 | 3 | public interface IState { 4 | void insertQuarter(); 5 | void ejectQuarter(); 6 | void addGumballs(int count); 7 | void turnHandle(); 8 | } 9 | -------------------------------------------------------------------------------- /2016/20.Proxy/src/com/alg/dp/proxy/solution2/IImage.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.proxy.solution2; 2 | 3 | public interface IImage { 4 | void display(); 5 | void show(); 6 | } 7 | -------------------------------------------------------------------------------- /2016/21.Bridge/src/com/alg/dp/bridge/solution2/BulletTaskView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.bridge.solution2; 2 | 3 | import java.util.List; 4 | 5 | public class BulletTaskView extends AbstractTaskView { 6 | 7 | @Override 8 | public void display() { 9 | List res = strategy.sort(tasks); 10 | for(Task task: res) { 11 | System.out.println("." + task); 12 | } 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/21.Bridge/src/com/alg/dp/bridge/solution2/ISort.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.bridge.solution2; 2 | 3 | import java.util.List; 4 | 5 | public interface ISort { 6 | List sort(List tasks); 7 | } 8 | -------------------------------------------------------------------------------- /2016/21.Bridge/src/com/alg/dp/bridge/solution2/ListTaskView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.bridge.solution2; 2 | 3 | import java.util.List; 4 | 5 | public class ListTaskView extends AbstractTaskView { 6 | 7 | @Override 8 | public void display() { 9 | List res = strategy.sort(tasks); 10 | for(Task task: res) { 11 | System.out.println(task); 12 | } 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/21.Bridge/src/com/alg/dp/bridge/solution2/NumberedTaskView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.bridge.solution2; 2 | 3 | import java.util.List; 4 | 5 | public class NumberedTaskView extends AbstractTaskView { 6 | 7 | @Override 8 | public void display() { 9 | List res = strategy.sort(tasks); 10 | int n = 1; 11 | for(Task task: res) { 12 | System.out.println(n + ":" + task); 13 | ++n; 14 | } 15 | 16 | 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2016/21.Bridge/src/com/alg/dp/bridge/solution2/UnorderedStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.bridge.solution2; 2 | 3 | import java.util.List; 4 | 5 | public class UnorderedStrategy implements ISort { 6 | 7 | @Override 8 | public List sort(List tasks) { 9 | return tasks; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/22.Interpreter/src/com/alg/dp/interpreter/solution1/Context.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.interpreter.solution1; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class Context { 7 | private Map map = new HashMap(); 8 | 9 | public void assign(String name, Integer value) { 10 | map.put(name, value); 11 | } 12 | 13 | public int lookup(String key) { 14 | return map.get(key); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /2016/22.Interpreter/src/com/alg/dp/interpreter/solution1/INumericExpression.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.interpreter.solution1; 2 | 3 | public interface INumericExpression { 4 | int interpret(Context ctx); 5 | } 6 | -------------------------------------------------------------------------------- /2016/23.Builder/src/com/alg/dp/builder/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.builder.solution1; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | House house1 = new House("foundation", "structure","roof"); 7 | System.out.println(house1); 8 | 9 | House house2 = new House("foundation", "structure","roof", true); 10 | System.out.println(house2); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/23.Builder/src/com/alg/dp/builder/solution3/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.builder.solution3; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | House house1 = House.builder() 7 | .foundation("foundation1") 8 | .structure("structure1") 9 | .roof("roof1") 10 | .painting(true) 11 | .getHouse(); 12 | System.out.println(house1); 13 | 14 | 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2016/23.Builder/src/com/alg/dp/gofbuilder/solution4/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.gofbuilder.solution4; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | House house1 = House.builder() 7 | .foundation("foundation1") 8 | .structure("structure1") 9 | .roof("roof1") 10 | .painting(true) 11 | .getHouse(); 12 | System.out.println(house1); 13 | 14 | 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2016/23.Builder/src/com/alg/dp/gofbuilder/solution4/Engineer.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.gofbuilder.solution4; 2 | 3 | public class Engineer { 4 | 5 | private Builder builder; 6 | 7 | public Engineer(Builder builder) { 8 | this.builder = builder; 9 | } 10 | 11 | public House makeHouse() { 12 | builder.buildFoundation(); 13 | builder.buildStructure(); 14 | 15 | builder.getHouse(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /2016/23.Builder/src/com/alg/dp/gofbuilder/solution4/IBuilder.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.gofbuilder.solution4; 2 | 3 | public interface IBuilder { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/solution1/SortDriver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.solution1; 2 | 3 | public class SortDriver { 4 | 5 | public static void main(String[] args) { 6 | int[] in = {10,5,8,15,1,3}; 7 | 8 | Sorter sorter = new Sorter(); 9 | sorter.setArray(in); 10 | sorter.setAlgorithm("bubblesort"); 11 | sorter.sort(); 12 | 13 | sorter.setAlgorithm("mergesort"); 14 | sorter.sort(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/solution2/BubbleSortingAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.solution2; 2 | 3 | public class BubbleSortingAlgorithm implements ISortAlgorithm { 4 | 5 | @Override 6 | public void sort(int[] in) { 7 | System.out.println("array is sorted using bubblesort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/solution2/ISortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.solution2; 2 | 3 | public interface ISortAlgorithm { 4 | void sort(int[] in); 5 | } 6 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/solution2/MergeSortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.solution2; 2 | 3 | public class MergeSortAlgorithm implements ISortAlgorithm { 4 | 5 | @Override 6 | public void sort(int[] in) { 7 | System.out.println("array is sorted using mergesort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/solution2/QuickSortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.solution2; 2 | 3 | public class QuickSortAlgorithm implements ISortAlgorithm { 4 | 5 | @Override 6 | public void sort(int[] in) { 7 | System.out.println("array is sorted using quicksort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/soluton3/AscendingComparator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.soluton3; 2 | 3 | public class AscendingComparator implements IComparator { 4 | 5 | @Override 6 | public int compare(int e1, int e2) { 7 | // TODO Auto-generated method stub 8 | return e1 - e2; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/soluton3/BubbleSortingAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.soluton3; 2 | 3 | public class BubbleSortingAlgorithm implements ISortAlgorithm { 4 | 5 | @Override 6 | public void sort(int[] in, IComparator comparator) { 7 | System.out.println("array is sorted using bubblesort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/soluton3/IComparator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.soluton3; 2 | 3 | public interface IComparator { 4 | int compare(int e1, int e2); 5 | } 6 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/soluton3/ISortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.soluton3; 2 | 3 | public interface ISortAlgorithm { 4 | void sort(int[] in, IComparator comparator); 5 | } 6 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/soluton3/MergeSortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.soluton3; 2 | 3 | public class MergeSortAlgorithm implements ISortAlgorithm { 4 | 5 | @Override 6 | public void sort(int[] in, IComparator comparator) { 7 | System.out.println("array is sorted using mergesort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/3.Strategy/src/com/alg/dp/strategy/soluton3/QuickSortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.strategy.soluton3; 2 | 3 | public class QuickSortAlgorithm implements ISortAlgorithm { 4 | 5 | @Override 6 | public void sort(int[] in, IComparator comparator) { 7 | System.out.println("array is sorted using quicksort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/4.Observer/src/com/alg/dp/observer/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.observer.solution1; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | 7 | WeatherData wd = new WeatherData(); 8 | wd.notify(40, 20, 30); 9 | 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/4.Observer/src/com/alg/dp/observer/solution2/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.observer.solution2; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | 7 | WeatherData wd = new WeatherData(); 8 | wd.subscribe(new CurrentConditionsDisplay()); 9 | wd.subscribe(new StatisticsDisplay()); 10 | wd.notify(40, 20, 30); 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2016/4.Observer/src/com/alg/dp/observer/solution2/IObserver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.observer.solution2; 2 | 3 | public interface IObserver { 4 | void update(Weather weather); 5 | } 6 | -------------------------------------------------------------------------------- /2016/5.Iterator/src/com/alg/dp/iterator/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.iterator.solution1; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | Manager m = new Manager(); 7 | m.traverse(); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/5.Iterator/src/com/alg/dp/iterator/solution2/IMenu.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.iterator.solution2; 2 | 3 | public interface IMenu { 4 | Iterator iterator(); 5 | void addItem(MenuItem menuItem); 6 | } 7 | -------------------------------------------------------------------------------- /2016/5.Iterator/src/com/alg/dp/iterator/solution2/Iterator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.iterator.solution2; 2 | 3 | public interface Iterator { 4 | boolean hasNext(); 5 | MenuItem next(); 6 | } 7 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution1/AbstractCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution1; 2 | 3 | public class AbstractCookie { 4 | protected String description; 5 | 6 | public String getDescription() { 7 | return description; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution1/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution1; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | description = "Circle Cookie"; 7 | } 8 | 9 | public float getCost() { 10 | return 10.0f; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution1/CircleNutsCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution1; 2 | 3 | public class CircleNutsCookie extends AbstractCookie { 4 | 5 | public CircleNutsCookie() { 6 | description = "Circle Cookie with Nuts"; 7 | } 8 | public float getCost() { 9 | return 10.0f + 5.0f; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution1/CircleSprinklesCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution1; 2 | 3 | public class CircleSprinklesCookie extends AbstractCookie { 4 | 5 | public CircleSprinklesCookie() { 6 | description = "Circle Cookie with Sprinkles"; 7 | } 8 | public float getCost() { 9 | return 10.0f + 2.0f; 10 | } 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution1/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution1; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | description = "Square Cookie"; 7 | } 8 | public float getCost() { 9 | return 15.0f; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution1/SquareNutsCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution1; 2 | 3 | public class SquareNutsCookie extends AbstractCookie { 4 | 5 | public SquareNutsCookie() { 6 | description = "Square Cookie with nuts"; 7 | } 8 | public float getCost() { 9 | return 15.0f + 5.0f; 10 | } 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution1/SquareSprinklesCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution1; 2 | 3 | public class SquareSprinklesCookie extends AbstractCookie { 4 | 5 | public SquareSprinklesCookie() { 6 | description = "Square Cookie with sprinkles"; 7 | } 8 | public float getCost() { 9 | return 15.0f + 2.0f; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution2/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution2; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | description = "Circle Cookie"; 7 | } 8 | 9 | public float getCost() { 10 | if(requireNuts) 11 | return 10.0f + 5.0f; 12 | else if(requireSprinkles) 13 | return 10.0f + 2.0f; 14 | else 15 | return 10.0f; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution2/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution2; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | description = "Square Cookie"; 7 | } 8 | public float getCost() { 9 | if(requireNuts) 10 | return 15.0f + 5.0f; 11 | else if(requireSprinkles) 12 | return 15.0f + 2.0f; 13 | else 14 | return 15.0f; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution3/AbstractCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution3; 2 | 3 | public abstract class AbstractCookie { 4 | protected String description; 5 | 6 | public String getDescription() { 7 | return description; 8 | } 9 | public abstract float getCost(); 10 | } 11 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution3/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution3; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | description = "Circle Cookie"; 7 | } 8 | 9 | public float getCost() { 10 | return 10.0f; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution3/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution3; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | description = "Square Cookie"; 7 | } 8 | public float getCost() { 9 | return 15.0f; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution4/AbstractCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution4; 2 | 3 | public abstract class AbstractCookie { 4 | protected String description; 5 | 6 | public String getDescription() { 7 | return description; 8 | } 9 | public abstract float getCost(); 10 | } 11 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution4/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution4; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | description = "Circle Cookie"; 7 | } 8 | 9 | public float getCost() { 10 | return 10.0f; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution4/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution4; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | description = "Square Cookie"; 7 | } 8 | public float getCost() { 9 | return 15.0f; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution5/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution5; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | description = "Circle Cookie"; 7 | } 8 | 9 | public float getCost() { 10 | float res = 10.0f; 11 | for(IDecorator decorator:decorators) 12 | res += decorator.getDecorationCost(); 13 | return res; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution5/IDecorator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution5; 2 | 3 | public interface IDecorator { 4 | String getDecorationDescription(); 5 | float getDecorationCost(); 6 | } 7 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution5/NutsDecorator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution5; 2 | 3 | public class NutsDecorator implements IDecorator { 4 | 5 | public String getDecorationDescription() { 6 | return " with Nuts"; 7 | } 8 | 9 | public float getDecorationCost() { 10 | return 5.0f; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution5/SprinklesDecorator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution5; 2 | 3 | public class SprinklesDecorator implements IDecorator { 4 | 5 | public String getDecorationDescription() { 6 | return " with Sprinkles"; 7 | } 8 | 9 | public float getDecorationCost() { 10 | return 2.0f; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/6.Decorator/src/com/alg/dp/decorator/solution5/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.decorator.solution5; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | description = "Square Cookie"; 7 | } 8 | public float getCost() { 9 | float res = 15.0f; 10 | for(IDecorator decorator:decorators) 11 | res += decorator.getDecorationCost(); 12 | return res; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/7.Mediator/src/com/alg/dp/mediatior/solution1/TempBar.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.mediatior.solution1; 2 | 3 | public class TempBar { 4 | private int value; 5 | 6 | 7 | public int getValue() { 8 | return value; 9 | } 10 | 11 | 12 | public void setValue(int value) { 13 | this.value = value; 14 | } 15 | 16 | 17 | @Override 18 | public String toString() { 19 | return "TempBar [value=" + value + "]"; 20 | } 21 | 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /2016/7.Mediator/src/com/alg/dp/mediatior/solution1/Utils.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.mediatior.solution1; 2 | 3 | public class Utils { 4 | 5 | public static int convertFtoC(int tempf) { 6 | return 0; 7 | } 8 | 9 | public static int convertCtoF(int tempC) { 10 | return 0; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/7.Mediator/src/com/alg/dp/mediator/solution2/FRaiseButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.mediator.solution2; 2 | 3 | public class FRaiseButton implements IButton { 4 | private AbstractMediator mediator; 5 | 6 | public FRaiseButton(AbstractMediator mediator) { 7 | this.mediator = mediator; 8 | } 9 | 10 | public void changed() { 11 | mediator.notify(this); 12 | } 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/7.Mediator/src/com/alg/dp/mediator/solution2/IButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.mediator.solution2; 2 | 3 | public interface IButton extends IWidget { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2016/7.Mediator/src/com/alg/dp/mediator/solution2/IEditBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.mediator.solution2; 2 | 3 | public interface IEditBox extends IWidget { 4 | void setTemp(int temp); 5 | int getTemp(); 6 | } 7 | -------------------------------------------------------------------------------- /2016/7.Mediator/src/com/alg/dp/mediator/solution2/IWidget.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.mediator.solution2; 2 | 3 | public interface IWidget { 4 | void changed(); 5 | } 6 | -------------------------------------------------------------------------------- /2016/7.Mediator/src/com/alg/dp/mediator/solution2/Utils.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.mediator.solution2; 2 | 3 | public class Utils { 4 | 5 | public static int convertFtoC(int tempf) { 6 | return 0; 7 | } 8 | 9 | public static int convertCtoF(int tempC) { 10 | return 0; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution1/IInventoryService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution1; 2 | 3 | public interface IInventoryService { 4 | boolean isStockAvailable(Product product); 5 | } 6 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution1/IPaymentService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution1; 2 | 3 | public interface IPaymentService { 4 | boolean doPayment(int cardid, int cvv, float money); 5 | } 6 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution1/IShippingService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution1; 2 | 3 | public interface IShippingService { 4 | boolean shipProduct(Product product); 5 | } 6 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution1/InventoryServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution1; 2 | 3 | public class InventoryServiceImpl implements IInventoryService { 4 | 5 | @Override 6 | public boolean isStockAvailable(Product product) { 7 | return true; 8 | } 9 | 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution1/PaymentServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution1; 2 | 3 | public class PaymentServiceImpl implements IPaymentService { 4 | 5 | @Override 6 | public boolean doPayment(int cardid, int cvv, float money) { 7 | return true; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution1/Product.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution1; 2 | 3 | public class Product { 4 | private int id; 5 | private int price; 6 | private String name; 7 | public Product(int id, int price, String name) { 8 | super(); 9 | this.id = id; 10 | this.price = price; 11 | this.name = name; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution1/ShippingServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution1; 2 | 3 | public class ShippingServiceImpl implements IShippingService { 4 | 5 | @Override 6 | public boolean shipProduct(Product product) { 7 | return true; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/IInventoryService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public interface IInventoryService { 4 | boolean isStockAvailable(Product product); 5 | } 6 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/IOrderFacade.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public interface IOrderFacade { 4 | void placeOrder(Product product, PaymentDetails payment); 5 | } 6 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/IPaymentService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public interface IPaymentService { 4 | boolean doPayment(PaymentDetails payment); 5 | } 6 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/IShippingService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public interface IShippingService { 4 | boolean shipProduct(Product product); 5 | } 6 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/InventoryServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public class InventoryServiceImpl implements IInventoryService { 4 | 5 | @Override 6 | public boolean isStockAvailable(Product product) { 7 | return true; 8 | } 9 | 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/MobileController.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public class MobileController { 4 | private IOrderFacade orderFacade; 5 | 6 | public MobileController(IOrderFacade orderFacade) { 7 | super(); 8 | this.orderFacade = orderFacade; 9 | } 10 | 11 | public void orderProduct(Product product, PaymentDetails payment) { 12 | orderFacade.placeOrder(product, payment); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/PaymentDetails.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public class PaymentDetails { 4 | private int cardid; 5 | private int cvv; 6 | private float money; 7 | 8 | public PaymentDetails(int cardid, int cvv, float money) { 9 | super(); 10 | this.cardid = cardid; 11 | this.cvv = cvv; 12 | this.money = money; 13 | } 14 | 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/PaymentServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public class PaymentServiceImpl implements IPaymentService { 4 | 5 | @Override 6 | public boolean doPayment(PaymentDetails payment) { 7 | return true; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/Product.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public class Product { 4 | private int id; 5 | private int price; 6 | private String name; 7 | public Product(int id, int price, String name) { 8 | super(); 9 | this.id = id; 10 | this.price = price; 11 | this.name = name; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/ShippingServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public class ShippingServiceImpl implements IShippingService { 4 | 5 | @Override 6 | public boolean shipProduct(Product product) { 7 | return true; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2016/8.Facade/src/com/alg/dp/facade/solution2/WebController.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.facade.solution2; 2 | 3 | public class WebController { 4 | private IOrderFacade orderFacade; 5 | 6 | public WebController(IOrderFacade orderFacade) { 7 | super(); 8 | this.orderFacade = orderFacade; 9 | } 10 | 11 | public void orderProduct(Product product, PaymentDetails payment) { 12 | orderFacade.placeOrder(product, payment); 13 | } 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2016/9.Command/src/com/alg/dp/command/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.command.solution1; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | Square[] squares = new Square[100]; 7 | 8 | squares[0] = new Square(0, 4); 9 | System.out.println(squares[0]); 10 | squares[0].scale(5); 11 | System.out.println(squares[0]); 12 | squares[0].move(-2, 5); 13 | System.out.println(squares[0]); 14 | 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2016/9.Command/src/com/alg/dp/command/solution2/AbstractOperation.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.command.solution2; 2 | 3 | public class AbstractOperation { 4 | protected Square square; 5 | protected String operation; 6 | 7 | public Square getSquare() { 8 | return square; 9 | } 10 | public String getOperation() { 11 | return operation; 12 | } 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2016/9.Command/src/com/alg/dp/command/solution2/ScaleOperation.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.command.solution2; 2 | 3 | public class ScaleOperation extends AbstractOperation { 4 | private int factor; 5 | 6 | public ScaleOperation(Square square, int factor) { 7 | operation = "scale"; 8 | this.factor = factor; 9 | this.square = square; 10 | } 11 | 12 | public int getFactor() { 13 | return factor; 14 | } 15 | 16 | 17 | } -------------------------------------------------------------------------------- /2016/9.Command/src/com/alg/dp/command/solution3/AbstractOperation.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.command.solution3; 2 | 3 | public abstract class AbstractOperation { 4 | protected Square square; 5 | protected String operation; 6 | 7 | public abstract void undo(); 8 | 9 | public abstract void execute(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/9.Command/src/com/alg/dp/command/solution3/PrintOperation.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.command.solution3; 2 | 3 | public class PrintOperation extends AbstractOperation { 4 | 5 | public PrintOperation(Square square) { 6 | this.square = square; 7 | } 8 | 9 | @Override 10 | public void undo() { 11 | // TODO Auto-generated method stub 12 | 13 | } 14 | 15 | @Override 16 | public void execute() { 17 | System.out.println(square); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /2016/9.Command/src/com/alg/dp/command/solution4/AbstractOperation.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.command.solution4; 2 | 3 | public abstract class AbstractOperation { 4 | protected Square square; 5 | protected String operation; 6 | 7 | public abstract void undo(); 8 | 9 | public abstract void execute(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2016/9.Command/src/com/alg/dp/command/solution4/PrintOperation.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.command.solution4; 2 | 3 | public class PrintOperation extends AbstractOperation { 4 | 5 | public PrintOperation(Square square) { 6 | this.square = square; 7 | } 8 | 9 | @Override 10 | public void undo() { 11 | // TODO Auto-generated method stub 12 | 13 | } 14 | 15 | @Override 16 | public void execute() { 17 | System.out.println(square); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /2016/README.md: -------------------------------------------------------------------------------- 1 | # design-patterns 2 | It consists of all code examples discussed as part of design patterns course at algorithmica 3 | -------------------------------------------------------------------------------- /2016/assignments/Assignment1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2016/assignments/Assignment1.pdf -------------------------------------------------------------------------------- /2016/assignments/Assignment2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2016/assignments/Assignment2.pdf -------------------------------------------------------------------------------- /2016/assignments/Assignment3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2016/assignments/Assignment3.pdf -------------------------------------------------------------------------------- /2016/assignments/Assignment4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2016/assignments/Assignment4.pdf -------------------------------------------------------------------------------- /2016/assignments/Assignment5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2016/assignments/Assignment5.pdf -------------------------------------------------------------------------------- /2016/assignments/Assignment6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2016/assignments/Assignment6.pdf -------------------------------------------------------------------------------- /2016/assignments/Project1-FileExplorer.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2016/assignments/Project1-FileExplorer.pdf -------------------------------------------------------------------------------- /2016/assignments/Project2-MinePump control system.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2016/assignments/Project2-MinePump control system.pdf -------------------------------------------------------------------------------- /2017-april/1.oo-in-reality/src/com/alg/dp/oo/encapsulation2/CoffeeRecipe.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.oo.encapsulation2; 2 | 3 | public class CoffeeRecipe extends Recipe { 4 | 5 | protected void addPowder() { 6 | System.out.println("Adding coffee powder"); 7 | } 8 | protected void addIngradients() { 9 | System.out.println("Add milk and sugar"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/1.oo-in-reality/src/com/alg/dp/oo/encapsulation2/TeaRecipe.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.oo.encapsulation2; 2 | 3 | public class TeaRecipe extends Recipe { 4 | 5 | protected void addPowder() { 6 | System.out.println("Adding tea powder"); 7 | } 8 | protected void addIngradients() { 9 | System.out.println("Add lemon"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/1.oo-in-reality/src/com/alg/dp/oo/encapsulation2/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.oo.encapsulation2; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | TeaRecipe tr1 = new TeaRecipe(); 7 | tr1.makeRecipe(); 8 | System.out.println(); 9 | CoffeeRecipe cr1 = new CoffeeRecipe(); 10 | cr1.makeRecipe(); 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2017-april/1.oo-in-reality/src/com/alg/dp/oo/extensibility/IStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.oo.extensibility; 2 | 3 | public interface IStack { 4 | void push(Integer x); 5 | Integer pop(); 6 | } 7 | 8 | /* class IStack { 9 | * virtual void push(Integer x)=0; 10 | * virtual Integer pop()=0; 11 | * } 12 | */ 13 | -------------------------------------------------------------------------------- /2017-april/10.adapter-pattern/src/com/alg/dp/project9/solution1/IStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project9.solution1; 2 | 3 | import java.util.Iterator; 4 | 5 | public interface IStack { 6 | void push(Integer e); 7 | Integer pop(); 8 | Iterator iterator(); 9 | int size(); 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/10.adapter-pattern/src/com/alg/dp/project9/solution1/LinkedStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project9.solution1; 2 | 3 | import java.util.LinkedList; 4 | 5 | public class LinkedStack extends LinkedList implements IStack { 6 | 7 | public void push(Integer e) { 8 | add(0, e); 9 | } 10 | 11 | public Integer pop() { 12 | if(isEmpty()) return null; 13 | return remove(0); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2017-april/10.adapter-pattern/src/com/alg/dp/project9/solution2/IStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project9.solution2; 2 | 3 | import java.util.Iterator; 4 | 5 | public interface IStack { 6 | void push(Integer e); 7 | Integer pop(); 8 | Iterator iterator(); 9 | int size(); 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/12.factory-method pattern/src/com/alg/dp/project10/solution1/CacheFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project10.solution1; 2 | 3 | public class CacheFactory { 4 | 5 | public static ICache getCache(int n) { 6 | if(n < 200) return new DefaultCache(n,"lru"); 7 | if(n < 1000) return new JCache(n, "fifo", true); 8 | return new TrieCache(n, "lfu", "tst"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/12.factory-method pattern/src/com/alg/dp/project10/solution1/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project10.solution1; 2 | 3 | public class Driver { 4 | 5 | /** 6 | * @param args 7 | */ 8 | public static void main(String[] args) { 9 | int n = Integer.parseInt(args[0]); 10 | ICache cache = CacheFactory.getCache(n); 11 | cache.put("abc",100); 12 | cache.put("def", 2000); 13 | cache.put("xyz", 170); 14 | cache.get("abc"); 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2017-april/12.factory-method pattern/src/com/alg/dp/project10/solution1/ICache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project10.solution1; 2 | 3 | public interface ICache { 4 | void put(String key, Integer value); 5 | Integer get(String key); 6 | } 7 | -------------------------------------------------------------------------------- /2017-april/12.factory-method pattern/src/com/alg/dp/project10/solution2/CacheFactory1.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project10.solution2; 2 | 3 | public class CacheFactory1 implements ICacheFactory { 4 | 5 | public ICache getCache(int n) { 6 | if(n < 200) return new DefaultCache(n,"lru"); 7 | if(n < 1000) return new JCache(n, "fifo", true); 8 | return new TrieCache(n, "lfu", "tst"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/12.factory-method pattern/src/com/alg/dp/project10/solution2/ICache.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project10.solution2; 2 | 3 | public interface ICache { 4 | void put(String key, Integer value); 5 | Integer get(String key); 6 | } 7 | -------------------------------------------------------------------------------- /2017-april/12.factory-method pattern/src/com/alg/dp/project10/solution2/ICacheFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project10.solution2; 2 | 3 | public interface ICacheFactory { 4 | ICache getCache(int n); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/EGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class EGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "economy gear box"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/EStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class EStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "economy stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/EWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class EWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "economy wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/IGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public interface IGearBox { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/IStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public interface IStereo { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/IWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public interface IWheel { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/LGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class LGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "luxury gear box"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/LStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class LStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "luxury stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/LWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class LWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "luxury wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/MGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class MGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "medium gear box"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/MStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class MStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "medium stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution1/MWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution1; 2 | 3 | public class MWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "medium wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/Driver.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class Driver { 4 | 5 | public static void main(String[] args) { 6 | AudiCar car1 = EconomyAudiBuilder.getCar(); 7 | System.out.println(car1); 8 | 9 | AudiCar car2 = MediumAudiBuilder.getCar(); 10 | System.out.println(car2); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/EGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class EGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "economy gear box"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/EStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class EStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "economy stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/EWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class EWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "economy wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/EconomyAudiBuilder.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class EconomyAudiBuilder { 4 | 5 | public static AudiCar getCar() { 6 | AudiCar audiCar = new AudiCar(); 7 | audiCar.setGearBox(new EGearBox()); 8 | audiCar.setStereo(new EStereo()); 9 | audiCar.setWheels(new EWheel()); 10 | return audiCar; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/IGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public interface IGearBox { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/IStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public interface IStereo { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/IWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public interface IWheel { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/LGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class LGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "luxury gear box"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/LStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class LStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "luxury stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/LWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class LWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "luxury wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/LuxuryAudiBuilder.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class LuxuryAudiBuilder { 4 | 5 | public static AudiCar getCar() { 6 | AudiCar audiCar = new AudiCar(); 7 | audiCar.setGearBox(new LGearBox()); 8 | audiCar.setStereo(new LStereo()); 9 | audiCar.setWheels(new LWheel()); 10 | return audiCar; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/MGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class MGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "medium gear box"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/MStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class MStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "medium stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/MWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class MWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "medium wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution2/MediumAudiBuilder.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution2; 2 | 3 | public class MediumAudiBuilder { 4 | 5 | public static AudiCar getCar() { 6 | AudiCar audiCar = new AudiCar(); 7 | audiCar.setGearBox(new MGearBox()); 8 | audiCar.setStereo(new MStereo()); 9 | audiCar.setWheels(new MWheel()); 10 | return audiCar; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/EGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class EGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "economy gear box"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/EStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class EStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "economy stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/EWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class EWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "economy wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/IGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public interface IGearBox { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/IStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public interface IStereo { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/IWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public interface IWheel { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/LGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class LGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "luxury gear box"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/LStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class LStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "luxury stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/LWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class LWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "luxury wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/MGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class MGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "medium gear box"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/MStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class MStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "medium stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution3/MWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution3; 2 | 3 | public class MWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "medium wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/EGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class EGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "economy gear box"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/EStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class EStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "economy stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/EWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class EWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "economy wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/ICarFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public interface ICarFactory { 4 | IGearBox getGearBox(); 5 | IStereo getStereo(); 6 | IWheel getWheel(); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/IGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public interface IGearBox { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/IStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public interface IStereo { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/IWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public interface IWheel { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/LGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class LGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "luxury gear box"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/LStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class LStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "luxury stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/LWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class LWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "luxury wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/MGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class MGearBox implements IGearBox { 4 | 5 | public String toString() { 6 | return "medium gear box"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/MStereo.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class MStereo implements IStereo { 4 | 5 | public String toString() { 6 | return "medium stereo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/13.abstractfactory-builder/src/com/alg/dp/project11/solution4/MWheel.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project11.solution4; 2 | 3 | public class MWheel implements IWheel { 4 | 5 | public String toString() { 6 | return "medium wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/14.composite-pattern/src/com/alg/dp/project12/solution2/Node.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project12.solution2; 2 | 3 | public abstract class Node { 4 | protected String name; 5 | protected Directory parent; 6 | 7 | public Node(Directory parent, String name) { 8 | super(); 9 | this.name = name; 10 | this.parent = parent; 11 | } 12 | 13 | abstract void traverse(); 14 | abstract void find(String pattern); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2017-april/15.visitor-pattern/src/com/alg/dp/project13/solution1/Node.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project13.solution1; 2 | 3 | public abstract class Node { 4 | protected String name; 5 | protected Directory parent; 6 | 7 | public Node(Directory parent, String name) { 8 | super(); 9 | this.name = name; 10 | this.parent = parent; 11 | } 12 | 13 | abstract void traverse(); 14 | abstract void find(String pattern); 15 | abstract long size(); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2017-april/15.visitor-pattern/src/com/alg/dp/project13/solution2/IVisitor.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project13.solution2; 2 | 3 | public interface IVisitor { 4 | void visit(File file); 5 | void visit(Directory directory); 6 | } 7 | -------------------------------------------------------------------------------- /2017-april/15.visitor-pattern/src/com/alg/dp/project13/solution2/Node.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project13.solution2; 2 | 3 | public abstract class Node { 4 | protected String name; 5 | protected Directory parent; 6 | 7 | public Node(Directory parent, String name) { 8 | super(); 9 | this.name = name; 10 | this.parent = parent; 11 | } 12 | 13 | public abstract void accept(IVisitor visitor); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/15.visitor-pattern/src/com/alg/dp/project13/solution3/IVisitor.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project13.solution3; 2 | 3 | public interface IVisitor { 4 | void visit(Node node); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/15.visitor-pattern/src/com/alg/dp/project13/solution3/TraversalVisitor.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project13.solution3; 2 | 3 | public class TraversalVisitor implements IVisitor { 4 | 5 | @Override 6 | public void visit(Node node) { 7 | System.out.println(node); 8 | for(int i = 0; i < node.getNumberOfChildren(); ++i) { 9 | visit(node.getChild(i)); 10 | } 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/16.chain-of-responsibility/src/com/alg/dp/project14/solution1/CEO.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project14.solution1; 2 | 3 | public class CEO extends AbstractHandler { 4 | 5 | public CEO(String name) { 6 | super(name, "CEO"); 7 | } 8 | 9 | public boolean approve(PurchaseOrder po) { 10 | if(po.getAmount() < 50000) { 11 | System.out.println("approved by " + toString()); 12 | return true; 13 | } 14 | else 15 | return false; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2017-april/16.chain-of-responsibility/src/com/alg/dp/project14/solution1/ExecutiveCommitte.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project14.solution1; 2 | 3 | public class ExecutiveCommitte extends AbstractHandler { 4 | 5 | public ExecutiveCommitte(String name) { 6 | super(name, "Executive Committe"); 7 | } 8 | 9 | public boolean approve(PurchaseOrder po) { 10 | System.out.println("approved by " + toString()); 11 | return true; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2017-april/16.chain-of-responsibility/src/com/alg/dp/project14/solution1/VP.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project14.solution1; 2 | 3 | public class VP extends AbstractHandler { 4 | 5 | public VP(String name) { 6 | super(name, "VP"); 7 | } 8 | 9 | public boolean approve(PurchaseOrder po) { 10 | if(po.getAmount() < 10000) { 11 | System.out.println("approved by " + toString()); 12 | return true; 13 | } 14 | else 15 | return false; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2017-april/16.chain-of-responsibility/src/com/alg/dp/project14/solution2/CEO.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project14.solution2; 2 | 3 | public class CEO extends AbstractHandler { 4 | 5 | public CEO(String name, float maxlimit) { 6 | super(name, "CEO", maxlimit); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/16.chain-of-responsibility/src/com/alg/dp/project14/solution2/Director.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project14.solution2; 2 | 3 | public class Director extends AbstractHandler { 4 | 5 | public Director(String name, float maxlimit) { 6 | super(name, "Director", maxlimit); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/16.chain-of-responsibility/src/com/alg/dp/project14/solution2/ExecutiveCommitte.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project14.solution2; 2 | 3 | public class ExecutiveCommitte extends AbstractHandler { 4 | 5 | public ExecutiveCommitte(String name, float maxlimit) { 6 | super(name, "Executive Committe", maxlimit); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/16.chain-of-responsibility/src/com/alg/dp/project14/solution2/SeniorManager.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project14.solution2; 2 | 3 | public class SeniorManager extends AbstractHandler { 4 | 5 | public SeniorManager(String name, float maxlimit) { 6 | super(name, "Senior Manager", maxlimit); 7 | } 8 | 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/16.chain-of-responsibility/src/com/alg/dp/project14/solution2/VP.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project14.solution2; 2 | 3 | public class VP extends AbstractHandler { 4 | 5 | public VP(String name, float maxlimit) { 6 | super(name, "VP", maxlimit); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution1/BulletView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution1; 2 | 3 | import java.util.List; 4 | 5 | public class BulletView implements IViewStrategy { 6 | 7 | @Override 8 | public void formattedDisplay(List tasks) { 9 | for(Task task:tasks) { 10 | System.out.println("*" + task.toString()); 11 | } 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution1/ISortStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution1; 2 | 3 | import java.util.List; 4 | 5 | interface ISortStrategy { 6 | void sort(List tasks); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution1/IViewStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution1; 2 | 3 | import java.util.List; 4 | 5 | public interface IViewStrategy { 6 | void formattedDisplay(List tasks); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution1/ListView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution1; 2 | 3 | import java.util.List; 4 | 5 | public class ListView implements IViewStrategy { 6 | 7 | @Override 8 | public void formattedDisplay(List tasks) { 9 | for(Task task:tasks) { 10 | System.out.println("-" + task.toString()); 11 | } 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution1/NumberedView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution1; 2 | 3 | import java.util.List; 4 | 5 | public class NumberedView implements IViewStrategy { 6 | 7 | @Override 8 | public void formattedDisplay(List tasks) { 9 | int n = 0; 10 | for(Task task:tasks) { 11 | System.out.println((++n) + task.toString()); 12 | } 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution1/UnsortedStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution1; 2 | 3 | import java.util.Collections; 4 | import java.util.List; 5 | 6 | public class UnsortedStrategy implements ISortStrategy { 7 | 8 | @Override 9 | public void sort(List tasks) { 10 | Collections.shuffle(tasks); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution2/BulletView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution2; 2 | 3 | import java.util.List; 4 | 5 | public class BulletView extends AbstractView { 6 | 7 | public BulletView(List tasks) { 8 | super(tasks); 9 | } 10 | @Override 11 | public void formattedDisplay() { 12 | for(Task task:tasks) { 13 | System.out.println("*" + task.toString()); 14 | } 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution2/ISortStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution2; 2 | 3 | import java.util.List; 4 | 5 | interface ISortStrategy { 6 | void sort(List tasks); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution2/IViewStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution2; 2 | 3 | import java.util.List; 4 | 5 | public interface IViewStrategy { 6 | void formattedDisplay(List tasks); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution2/ListView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution2; 2 | 3 | import java.util.List; 4 | 5 | 6 | public class ListView extends AbstractView { 7 | 8 | public ListView(List tasks) { 9 | super(tasks); 10 | } 11 | public void formattedDisplay() { 12 | for(Task task:tasks) { 13 | System.out.println("-" + task.toString()); 14 | } 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution2/NumberedView.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution2; 2 | 3 | import java.util.List; 4 | 5 | 6 | public class NumberedView extends AbstractView { 7 | 8 | public NumberedView(List tasks) { 9 | super(tasks); 10 | } 11 | public void formattedDisplay() { 12 | int n = 0; 13 | for(Task task:tasks) { 14 | System.out.println((++n) + task.toString()); 15 | } 16 | 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2017-april/17.bridge-pattern/src/com/alg/dp/project15/solution2/UnsortedStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project15.solution2; 2 | 3 | import java.util.Collections; 4 | import java.util.List; 5 | 6 | public class UnsortedStrategy implements ISortStrategy { 7 | 8 | @Override 9 | public void sort(List tasks) { 10 | Collections.shuffle(tasks); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution1/DBInventoryService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution1; 2 | 3 | public class DBInventoryService implements IInventoryService { 4 | 5 | @Override 6 | public boolean checkStock(Product product) { 7 | return Math.random() > 0.4?true:false; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution1/FedExShippingService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution1; 2 | 3 | public class FedExShippingService implements IShippingService { 4 | 5 | @Override 6 | public boolean ship(Product product, Address address) { 7 | return Math.random()>0.5?true:false; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution1/ICICIPaymentService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution1; 2 | 3 | public class ICICIPaymentService implements IPaymentService { 4 | 5 | @Override 6 | public boolean pay(float amount, int cardno, int cvv) { 7 | return Math.random()>0.5?true:false; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution1/IInventoryService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution1; 2 | 3 | public interface IInventoryService { 4 | boolean checkStock(Product product); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution1/IPaymentService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution1; 2 | 3 | public interface IPaymentService { 4 | boolean pay(float amount, int cardno, int cvv); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution1/IShippingService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution1; 2 | 3 | public interface IShippingService { 4 | boolean ship(Product product, Address address); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution1/PayPalPaymentService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution1; 2 | 3 | public class PayPalPaymentService implements IPaymentService { 4 | 5 | @Override 6 | public boolean pay(float amount, int cardno, int cvv) { 7 | return Math.random()>0.5?true:false; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution1/Product.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution1; 2 | 3 | public class Product { 4 | private String id; 5 | private String description; 6 | public Product(String id, String description) { 7 | super(); 8 | this.id = id; 9 | this.description = description; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/DBInventoryService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public class DBInventoryService implements IInventoryService { 4 | 5 | @Override 6 | public boolean checkStock(Product product) { 7 | return Math.random() > 0.4?true:false; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/FedExShippingService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public class FedExShippingService implements IShippingService { 4 | 5 | @Override 6 | public boolean ship(Product product, Address address) { 7 | return Math.random()>0.5?true:false; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/ICICIPaymentService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public class ICICIPaymentService implements IPaymentService { 4 | 5 | @Override 6 | public boolean pay(float amount, int cardno, int cvv) { 7 | return Math.random()>0.5?true:false; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/IInventoryService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public interface IInventoryService { 4 | boolean checkStock(Product product); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/IOrderFacade.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public interface IOrderFacade { 4 | void orderProduct(Product product, float amount, int cardno, int cvv, Address address); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/IPaymentService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public interface IPaymentService { 4 | boolean pay(float amount, int cardno, int cvv); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/IShippingService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public interface IShippingService { 4 | boolean ship(Product product, Address address); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/PayPalPaymentService.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public class PayPalPaymentService implements IPaymentService { 4 | 5 | @Override 6 | public boolean pay(float amount, int cardno, int cvv) { 7 | return Math.random()>0.5?true:false; 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/18.facade-pattern/src/com/alg/dp/project20/solution2/Product.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project20.solution2; 2 | 3 | public class Product { 4 | private String id; 5 | private String description; 6 | public Product(String id, String description) { 7 | super(); 8 | this.id = id; 9 | this.description = description; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/19.proxy-pattern/src/com/alg/dp/project16/solution2/IProxy.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project16.solution2; 2 | 3 | import javax.swing.ImageIcon; 4 | 5 | public interface IProxy { 6 | ImageIcon getImage() throws Exception; 7 | String getAlter(); 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/2.template-method-pattern/src/com/alg/dp/project1/solution1/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project1.solution1; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | TeaRecipe tr1 = new TeaRecipe(); 7 | tr1.makeTea(); 8 | 9 | CoffeeRecipe cr1 = new CoffeeRecipe(); 10 | cr1.makeCoffee(); 11 | 12 | } 13 | 14 | } 15 | 16 | /* Issues: 17 | 1) code redundancy 18 | 19 | */ -------------------------------------------------------------------------------- /2017-april/2.template-method-pattern/src/com/alg/dp/project1/solution2/Recipe.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project1.solution2; 2 | 3 | public abstract class Recipe { 4 | 5 | protected void boilWater() { 6 | System.out.println("Boiling water"); 7 | } 8 | 9 | protected void pour() { 10 | System.out.println("Pouring into cup"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/2.template-method-pattern/src/com/alg/dp/project1/solution2/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project1.solution2; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | TeaRecipe tr1 = new TeaRecipe(); 7 | tr1.makeTea(); 8 | System.out.println(); 9 | CoffeeRecipe cr1 = new CoffeeRecipe(); 10 | cr1.makeCoffee(); 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2017-april/2.template-method-pattern/src/com/alg/dp/project1/solution3/CoffeeRecipe.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project1.solution3; 2 | 3 | public class CoffeeRecipe extends Recipe { 4 | 5 | protected void addPowder() { 6 | System.out.println("Adding coffee powder"); 7 | } 8 | protected void addIngradients() { 9 | System.out.println("Add milk and sugar"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/2.template-method-pattern/src/com/alg/dp/project1/solution3/TeaRecipe.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project1.solution3; 2 | 3 | public class TeaRecipe extends Recipe { 4 | 5 | protected void addPowder() { 6 | System.out.println("Adding tea powder"); 7 | } 8 | protected void addIngradients() { 9 | System.out.println("Add lemon"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/2.template-method-pattern/src/com/alg/dp/project1/solution3/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project1.solution3; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | TeaRecipe tr1 = new TeaRecipe(); 7 | tr1.makeRecipe(); 8 | System.out.println(); 9 | CoffeeRecipe cr1 = new CoffeeRecipe(); 10 | cr1.makeRecipe(); 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2017-april/2.template-method-pattern/src/com/alg/dp/project1/solution4/TeaRecipe.java: -------------------------------------------------------------------------------- 1 | package ccom.alg.dp.project1.solution4; 2 | 3 | public class TeaRecipe extends Recipe { 4 | 5 | public TeaRecipe(boolean needIngradients) { 6 | super(needIngradients); 7 | } 8 | 9 | protected void addPowder() { 10 | System.out.println("Adding tea powder"); 11 | } 12 | protected void addIngradients() { 13 | System.out.println("Add lemon"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/Book.java: -------------------------------------------------------------------------------- 1 | 2 | public class Book extends Product { 3 | 4 | } 5 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/Driver.java: -------------------------------------------------------------------------------- 1 | 2 | public class Driver { 3 | 4 | public static void main(String[] args) { 5 | ShoppingCart cart1 = new ShoppingCart(); 6 | cart1.add(new Book()); 7 | cart1.add(new Dvd()); 8 | cart1.add(new Dvd()); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/Dvd.java: -------------------------------------------------------------------------------- 1 | 2 | public class Dvd extends Product { 3 | 4 | } 5 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/Product.java: -------------------------------------------------------------------------------- 1 | 2 | public class Product { 3 | 4 | } 5 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/ShoppingCart.java: -------------------------------------------------------------------------------- 1 | import java.util.ArrayList; 2 | import java.util.List; 3 | 4 | 5 | public class ShoppingCart { 6 | private List products = new ArrayList(); 7 | 8 | public void add(Product p) { 9 | products.add(p); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/com/alg/dp/project17/solutio2/Book.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project17.solutio2; 2 | 3 | public class Book extends Product { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/com/alg/dp/project17/solutio2/BookFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project17.solutio2; 2 | 3 | public class BookFactory extends ProductFactory { 4 | public Product getProduct() throws Exception { 5 | return (Book) (prototypes.get("book").clone()); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/com/alg/dp/project17/solutio2/Dvd.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project17.solutio2; 2 | 3 | public class Dvd extends Product { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/com/alg/dp/project17/solutio2/DvdFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project17.solutio2; 2 | 3 | public class DvdFactory extends ProductFactory { 4 | public Product getProduct() throws Exception { 5 | return (Dvd)(prototypes.get("dvd").clone()); 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/com/alg/dp/project17/solutio2/Product.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project17.solutio2; 2 | 3 | public class Product implements Cloneable { 4 | 5 | @Override 6 | protected Object clone() throws CloneNotSupportedException { 7 | return super.clone(); 8 | } 9 | 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/com/alg/dp/project17/solutio2/ProductFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project17.solutio2; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public abstract class ProductFactory { 7 | protected Map prototypes; 8 | 9 | public ProductFactory() { 10 | prototypes = new HashMap(); 11 | } 12 | 13 | public abstract Product getProduct() throws Exception; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/20.prototype-pattern/src/com/alg/dp/project17/solutio2/ShoppingCart.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project17.solutio2; 2 | import java.util.ArrayList; 3 | import java.util.List; 4 | 5 | 6 | public class ShoppingCart { 7 | private List products = new ArrayList(); 8 | 9 | public void add(Product p) { 10 | products.add(p); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/3.state-pattern/src/com/alg/dp/project2/solution2/IState.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project2.solution2; 2 | 3 | public interface IState { 4 | void addGumballs(int count); 5 | void insertCoin(); 6 | void turnHandle(); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/3.state-pattern/src/com/alg/dp/project2/solution3/IState.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project2.solution3; 2 | 3 | public interface IState { 4 | void addGumballs(GumballMachine gbm, int count); 5 | void insertCoin(GumballMachine gbm); 6 | void turnHandle(GumballMachine gbm); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution1/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution1; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | int[] in = {10, 6, 7, 8, 3}; 7 | Sorter sorter = new Sorter(in); 8 | sorter.sort("bubble_sort"); 9 | sorter.sort("merge_sort"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution2/BubbleSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution2; 2 | 3 | public class BubbleSorter extends Sorter { 4 | 5 | public BubbleSorter(int[] in) { 6 | super(in); 7 | } 8 | 9 | public void sort() { 10 | System.out.println("sorting array using bubble sort algorithm"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution2/MergeSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution2; 2 | 3 | public class MergeSorter extends Sorter { 4 | 5 | public MergeSorter(int[] in) { 6 | super(in); 7 | } 8 | 9 | public void sort() { 10 | System.out.println("sorting array using merge sort algorithm"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution2/QucikSort.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution2; 2 | 3 | public class QucikSort extends Sorter { 4 | 5 | public QucikSort(int[] in) { 6 | super(in); 7 | } 8 | 9 | public void sort() { 10 | System.out.println("sort the array using quicksort algorithm"); 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution2/Sorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution2; 2 | 3 | public abstract class Sorter { 4 | private int[] array; 5 | 6 | public Sorter(int[] in) { 7 | array = in; 8 | } 9 | 10 | public abstract void sort(); 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution2/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution2; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | int[] in = {10, 6, 7, 8, 3}; 7 | Sorter sorter = new BubbleSorter(in); 8 | sorter.sort(); 9 | sorter = new MergeSorter(in); 10 | sorter.sort(); 11 | sorter = new QucikSort(in); 12 | sorter.sort(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution3/AScMergeSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution3; 2 | 3 | public class AScMergeSorter extends Sorter { 4 | 5 | public AScMergeSorter(int[] in) { 6 | super(in); 7 | } 8 | 9 | public void sort() { 10 | System.out.println("sorting array in ascending order using merge sort algorithm"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution3/AscBubbleSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution3; 2 | 3 | public class AscBubbleSorter extends Sorter { 4 | 5 | public AscBubbleSorter(int[] in) { 6 | super(in); 7 | } 8 | 9 | public void sort() { 10 | System.out.println("sorting array in ascending order using bubble sort algorithm"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution3/DescBubbleSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution3; 2 | 3 | public class DescBubbleSorter extends Sorter { 4 | 5 | public DescBubbleSorter(int[] in) { 6 | super(in); 7 | } 8 | 9 | public void sort() { 10 | System.out.println("sorting array in descending order using bubble sort algorithm"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution3/DescMergeSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution3; 2 | 3 | public class DescMergeSorter extends Sorter { 4 | 5 | public DescMergeSorter(int[] in) { 6 | super(in); 7 | } 8 | 9 | public void sort() { 10 | System.out.println("sorting array in descending order using merge sort algorithm"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution3/Sorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution3; 2 | 3 | public abstract class Sorter { 4 | private int[] array; 5 | 6 | public Sorter(int[] in) { 7 | array = in; 8 | } 9 | 10 | public abstract void sort(); 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution3/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution3; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | int[] in = {10, 6, 7, 8, 3}; 7 | Sorter sorter = new AscBubbleSorter(in); 8 | sorter.sort(); 9 | sorter = new DescMergeSorter(in); 10 | sorter.sort(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution4/BubbleSortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution4; 2 | 3 | public class BubbleSortAlgorithm implements ISortAlgorithm { 4 | 5 | @Override 6 | public void sort() { 7 | System.out.println("Sort the array using bubble sort"); 8 | 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution4/ISortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution4; 2 | 3 | public interface ISortAlgorithm { 4 | void sort(); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution4/MergeSortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution4; 2 | 3 | public class MergeSortAlgorithm implements ISortAlgorithm { 4 | 5 | @Override 6 | public void sort() { 7 | System.out.println("Sort array using mergesort"); 8 | 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/solution4/Sorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.solution4; 2 | 3 | 4 | public class Sorter { 5 | private int[] array; 6 | private ISortAlgorithm algo; 7 | 8 | public Sorter(int[] in) { 9 | array = in; 10 | } 11 | 12 | public void setAlorithm(ISortAlgorithm algo) { 13 | this.algo = algo; 14 | } 15 | public void sort() { 16 | algo.sort(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/soluton5/AscComparator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.soluton5; 2 | 3 | public class AscComparator implements IComparator { 4 | 5 | @Override 6 | public int compare(int e1, int e2) { 7 | // TODO Auto-generated method stub 8 | return 0; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/soluton5/IComparator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.soluton5; 2 | 3 | public interface IComparator { 4 | int compare(int e1, int e2); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/soluton5/ISortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.soluton5; 2 | 3 | public interface ISortAlgorithm { 4 | void sort(); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/soluton5/MergeSortAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.soluton5; 2 | 3 | public class MergeSortAlgorithm implements ISortAlgorithm { 4 | private IComparator comparator; 5 | 6 | public MergeSortAlgorithm(IComparator comparator) { 7 | this.comparator = comparator; 8 | } 9 | @Override 10 | public void sort() { 11 | System.out.println("Sort array using mergesort"); 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/4.strategy-pattern/src/com/alg/dp/project3/soluton5/Sorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project3.soluton5; 2 | 3 | 4 | public class Sorter { 5 | private int[] array; 6 | private ISortAlgorithm algo; 7 | 8 | public Sorter(int[] in) { 9 | array = in; 10 | } 11 | 12 | public void setAlorithm(ISortAlgorithm algo) { 13 | this.algo = algo; 14 | } 15 | public void sort() { 16 | algo.sort(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2017-april/5.observer-pattern/src/com/alg/dp/project4/solution2/IDisplay.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project4.solution2; 2 | 3 | public interface IDisplay { 4 | void update(Weather weather); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution1/CLowerButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution1; 2 | 3 | public class CLowerButton { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution1/CRaiseButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution1; 2 | 3 | public class CRaiseButton { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution1/TempBar.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution1; 2 | 3 | public class TempBar { 4 | private float temp; 5 | 6 | public void display(float temp) { 7 | this.temp = temp; 8 | System.out.println("Temp bar:" + temp); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution1/Utils.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution1; 2 | 3 | public class Utils { 4 | 5 | public static float convertCF(float tempInC) { 6 | return tempInC * 9.0f/5; 7 | } 8 | public static float convertFC(float tempInF) { 9 | return tempInF * 5.0f/9; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/CLowerButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public class CLowerButton implements IButton { 4 | private IMediator mediator; 5 | 6 | public CLowerButton(IMediator mediator) { 7 | super(); 8 | this.mediator = mediator; 9 | } 10 | 11 | public void onClick() { 12 | System.out.println("Lower Button for Celsius is pressed"); 13 | mediator.notify(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/CRaiseButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public class CRaiseButton implements IButton { 4 | private IMediator mediator; 5 | 6 | public CRaiseButton(IMediator mediator) { 7 | super(); 8 | this.mediator = mediator; 9 | } 10 | 11 | public void onClick() { 12 | System.out.println("Raise Button for Celsius is pressed"); 13 | mediator.notify(this); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/FLowerButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public class FLowerButton implements IButton { 4 | private IMediator mediator; 5 | 6 | public FLowerButton(IMediator mediator) { 7 | super(); 8 | this.mediator = mediator; 9 | } 10 | 11 | public void onClick() { 12 | System.out.println("Lower Button for Forenheit is pressed"); 13 | mediator.notify(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/FRaiseButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public class FRaiseButton implements IButton { 4 | private IMediator mediator; 5 | 6 | public FRaiseButton(IMediator mediator) { 7 | super(); 8 | this.mediator = mediator; 9 | } 10 | 11 | public void onClick() { 12 | System.out.println("Raise Button for Forenheit is pressed"); 13 | mediator.notify(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/IButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public interface IButton { 4 | void onClick(); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/IEditBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public interface IEditBox { 4 | void change(float temp); 5 | void update(float temp); 6 | float getTemp(); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/IMediator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public interface IMediator { 4 | void notify(IEditBox editbox, float temp); 5 | void notify(IButton button); 6 | } 7 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/TempBar.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public class TempBar { 4 | private float temp; 5 | 6 | public void display(float temp) { 7 | this.temp = temp; 8 | System.out.println("Temp bar:" + temp); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution2/Utils.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution2; 2 | 3 | public class Utils { 4 | 5 | public static float convertCF(float tempInC) { 6 | return tempInC * 9.0f/5; 7 | } 8 | public static float convertFC(float tempInF) { 9 | return tempInF * 5.0f/9; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution3/IMediator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution3; 2 | 3 | public interface IMediator { 4 | void notify(IWidget widget, float value); 5 | } 6 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution3/IWidget.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution3; 2 | 3 | public interface IWidget { 4 | void update(float temp); 5 | void change(float temp); 6 | void change(); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/6.mediator-pattern/src/com/alg/dp/project5/solution3/Utils.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project5.solution3; 2 | 3 | public class Utils { 4 | 5 | public static float convertCF(float tempInC) { 6 | return tempInC * 9.0f/5; 7 | } 8 | public static float convertFC(float tempInF) { 9 | return tempInF * 5.0f/9; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution2/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution2; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | super("Circle cookie", 20); 7 | } 8 | 9 | public CircleCookie(String description, float price) { 10 | super(description, price); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution2/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution2; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | super("Square cookie", 15); 7 | } 8 | public SquareCookie(String description, float price) { 9 | super(description, price); 10 | } 11 | 12 | @Override 13 | public String toString() { 14 | return super.toString(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution3/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution3; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | super("Circle cookie", 20); 7 | } 8 | 9 | public CircleCookie(String description, float price) { 10 | super(description, price); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution3/ICookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution3; 2 | 3 | public interface ICookie { 4 | float getPrice(); 5 | String getDescription(); 6 | String getCookieDetails(); 7 | void setPrice(float price); 8 | void setDescription(String description); 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution3/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution3; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | super("Square cookie", 15); 7 | } 8 | public SquareCookie(String description, float price) { 9 | super(description, price); 10 | } 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution4/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution4; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | super("Circle cookie", 20); 7 | } 8 | 9 | public CircleCookie(String description, float price) { 10 | super(description, price); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution4/ICookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution4; 2 | 3 | public interface ICookie { 4 | float getPrice(); 5 | String getDescription(); 6 | String getCookieDetails(); 7 | void setPrice(float price); 8 | void setDescription(String description); 9 | } 10 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution4/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution4; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | super("Square cookie", 15); 7 | } 8 | public SquareCookie(String description, float price) { 9 | super(description, price); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution5/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution5; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie() { 6 | super("Circle cookie", 20); 7 | } 8 | 9 | public CircleCookie(String description, float price) { 10 | super(description, price); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution5/ICookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution5; 2 | 3 | public interface ICookie { 4 | float getPrice(); 5 | String getDescription(); 6 | String getCookieDetails(); 7 | void setPrice(float price); 8 | void setDescription(String description); 9 | void addDecorator(IDecorator decorator); 10 | } 11 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution5/IDecorator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution5; 2 | 3 | public interface IDecorator { 4 | String getDescription(); 5 | float getPrice(); 6 | String getDecoratorDetails(); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/7.decorator-pattern/src/com/alg/dp/project6/solution5/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project6.solution5; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie() { 6 | super("Square cookie", 15); 7 | } 8 | public SquareCookie(String description, float price) { 9 | super(description, price); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2017-april/8.command-pattern/src/com/alg/dp/project7/solution2/ScaleCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project7.solution2; 2 | 3 | public class ScaleCommand extends AbstractCommand { 4 | private int j; 5 | 6 | public ScaleCommand(String command, Square square, int j) { 7 | super(command, square); 8 | this.j = j; 9 | } 10 | 11 | public int getJ() { 12 | return j; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /2017-april/8.command-pattern/src/com/alg/dp/project7/solution3/AbstractCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project7.solution3; 2 | 3 | public abstract class AbstractCommand { 4 | protected Square square; 5 | 6 | public AbstractCommand(Square square) { 7 | this.square = square; 8 | } 9 | 10 | public Square getSquare() { 11 | return square; 12 | } 13 | 14 | abstract void undo(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2017-april/8.command-pattern/src/com/alg/dp/project7/solution3/MoveCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project7.solution3; 2 | 3 | public class MoveCommand extends AbstractCommand { 4 | private int j; 5 | private int k; 6 | 7 | public MoveCommand(Square square, int j, int k) { 8 | super(square); 9 | this.j = j; 10 | this.k = k; 11 | } 12 | 13 | 14 | public void undo() { 15 | square.move_undo(j, k); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /2017-april/8.command-pattern/src/com/alg/dp/project7/solution3/ScaleCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project7.solution3; 2 | 3 | public class ScaleCommand extends AbstractCommand { 4 | private int j; 5 | 6 | public ScaleCommand(Square square, int j) { 7 | super(square); 8 | this.j = j; 9 | } 10 | 11 | public void undo() { 12 | square.scale_undo(j); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /2017-april/8.command-pattern/src/com/alg/dp/project7/solution4/ScaleCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project7.solution4; 2 | 3 | public class ScaleCommand extends AbstractCommand { 4 | private int j; 5 | 6 | public ScaleCommand(Square square, int j) { 7 | super(square); 8 | this.j = j; 9 | } 10 | 11 | public void execute() { 12 | square.scale(j); 13 | } 14 | public void undo() { 15 | square.scale_undo(j); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /2017-april/8.command-pattern/src/com/alg/dp/project7/solution5/ScaleCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project7.solution5; 2 | 3 | public class ScaleCommand extends AbstractCommand { 4 | private int j; 5 | 6 | public ScaleCommand(Square square, int j) { 7 | super(square); 8 | this.j = j; 9 | } 10 | 11 | public void execute() { 12 | square.scale(j); 13 | } 14 | public void undo() { 15 | square.scale_undo(j); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /2017-april/9.iterator-pattern/src/com/alg/dp/project8/solution2/Iterator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project8.solution2; 2 | 3 | public interface Iterator { 4 | boolean hasNext(); 5 | MenuItem next(); 6 | void reset(); 7 | } 8 | -------------------------------------------------------------------------------- /2017-april/9.iterator-pattern/src/com/alg/dp/project8/solution3/Iterator.java: -------------------------------------------------------------------------------- 1 | package com.alg.dp.project8.solution3; 2 | 3 | public interface Iterator { 4 | boolean hasNext(); 5 | MenuItem next(); 6 | } 7 | -------------------------------------------------------------------------------- /2017-april/assignments/Assignment1(template method, state).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2017-april/assignments/Assignment1(template method, state).pdf -------------------------------------------------------------------------------- /2017-april/assignments/Assignment2(observer, strategy).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2017-april/assignments/Assignment2(observer, strategy).pdf -------------------------------------------------------------------------------- /2017-april/assignments/Assignment3(mediator,decorator).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2017-april/assignments/Assignment3(mediator,decorator).pdf -------------------------------------------------------------------------------- /2017-april/assignments/Assignment4(command, iterator).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2017-april/assignments/Assignment4(command, iterator).pdf -------------------------------------------------------------------------------- /2017-april/assignments/Assignment5(design choices).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2017-april/assignments/Assignment5(design choices).pdf -------------------------------------------------------------------------------- /2017-april/assignments/Assignment6(composite, visitor, iterator).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2017-april/assignments/Assignment6(composite, visitor, iterator).pdf -------------------------------------------------------------------------------- /2019-aug/1.oo-concepts/src/com/alg/design/encapsulation/ArrayStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.design.encapsulation; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class ArrayStack implements IStack { 6 | private ArrayList data; 7 | 8 | public void push(int x) { 9 | 10 | } 11 | public int pop() { 12 | return 0; 13 | } 14 | public int top() { 15 | return 0; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2019-aug/1.oo-concepts/src/com/alg/design/encapsulation/IStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.design.encapsulation; 2 | 3 | public interface IStack { 4 | void push(int x); 5 | int top(); 6 | int pop(); 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/1.oo-concepts/src/com/alg/design/encapsulation/LinkedStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.design.encapsulation; 2 | 3 | import java.util.LinkedList; 4 | 5 | public class LinkedStack implements IStack { 6 | private LinkedList data; 7 | 8 | public void push(int x) { 9 | 10 | } 11 | public int pop() { 12 | return 0; 13 | } 14 | public int top() { 15 | return 0; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /2019-aug/1.oo-concepts/src/com/alg/design/encapsulation/TestStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.design.encapsulation; 2 | 3 | public class TestStack { 4 | 5 | /** 6 | * @param args 7 | */ 8 | public static void main(String[] args) { 9 | IStack s1 = new ArrayStack(); 10 | System.out.println(s1.top()); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/10.adapter-pattern/src/com/alg/oodesign/solution1/IStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public interface IStack { 4 | void push(int x); 5 | int pop(); 6 | int top(); 7 | void display(); 8 | } 9 | -------------------------------------------------------------------------------- /2019-aug/10.adapter-pattern/src/com/alg/oodesign/solution1/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | IStack stack = new LinkedStack(); 7 | stack.push(10); 8 | stack.push(20); 9 | stack.display(); 10 | System.out.println(stack.top()); 11 | System.out.println(stack.pop()); 12 | stack.display(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/10.adapter-pattern/src/com/alg/oodesign/solution2/IStack.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IStack { 4 | void push(int x); 5 | Integer pop(); 6 | Integer top(); 7 | void display(); 8 | } 9 | -------------------------------------------------------------------------------- /2019-aug/10.adapter-pattern/src/com/alg/oodesign/solution2/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | IStack stack = new LinkedStack(); 7 | stack.push(10); 8 | stack.push(20); 9 | stack.display(); 10 | System.out.println(stack.top()); 11 | System.out.println(stack.pop()); 12 | stack.display(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/11.command-pattern/src/com/alg/oodesign/solution12/ScaleCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution12; 2 | 3 | public class ScaleCommand extends AbstractCommand { 4 | private int k; 5 | 6 | public ScaleCommand(Square square, int k) { 7 | super("scale", square); 8 | this.k = k; 9 | } 10 | 11 | public int getK() { 12 | return k; 13 | } 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/11.command-pattern/src/com/alg/oodesign/solution3/IShape.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public interface IShape { 4 | void move(int i, int j); 5 | void unmove(int i, int j); 6 | void scale(int k); 7 | void unscale(int k); 8 | void rotate(); 9 | void unrotate(); 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/11.command-pattern/src/com/alg/oodesign/solution3/RotateCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class RotateCommand extends AbstractCommand { 4 | 5 | public RotateCommand(IShape shape) { 6 | super("rotate", shape); 7 | } 8 | 9 | @Override 10 | public void execute() { 11 | shape.rotate(); 12 | } 13 | 14 | @Override 15 | public void unexecute() { 16 | shape.unrotate(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2019-aug/11.command-pattern/src/com/alg/oodesign/solution4/IShape.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public interface IShape { 4 | void move(int i, int j); 5 | void unmove(int i, int j); 6 | void scale(int k); 7 | void unscale(int k); 8 | void rotate(); 9 | void unrotate(); 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/11.command-pattern/src/com/alg/oodesign/solution4/RotateCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class RotateCommand extends AbstractCommand { 4 | 5 | public RotateCommand(IShape shape) { 6 | super("rotate", shape); 7 | } 8 | 9 | @Override 10 | public void execute() { 11 | shape.rotate(); 12 | } 13 | 14 | @Override 15 | public void unexecute() { 16 | shape.unrotate(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution1/CEO.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class CEO extends AbstractRole { 4 | private static CEO ceo; 5 | 6 | private CEO(String name) { 7 | super(name, "CEO", 10000); 8 | } 9 | public static CEO getInstance() { 10 | if(ceo == null) 11 | ceo = new CEO("ceo"); 12 | return ceo; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution1/Director.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Director extends AbstractRole { 4 | 5 | public Director(String name) { 6 | super(name, "Director", 5000); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution1/SeniorManager.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class SeniorManager extends AbstractRole { 4 | 5 | public SeniorManager(String name) { 6 | super(name, "Senior Manager", 1000); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution1/VicePresident.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class VicePresident extends AbstractRole { 4 | 5 | public VicePresident(String name) { 6 | super(name, "Vice President", 10000); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution2/CEO.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class CEO extends AbstractRole { 4 | private static CEO ceo; 5 | 6 | private CEO(String name) { 7 | super(name, "CEO", 10000); 8 | } 9 | public static CEO getInstance() { 10 | if(ceo == null) 11 | ceo = new CEO("ceo"); 12 | return ceo; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution2/Director.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Director extends AbstractRole { 4 | 5 | public Director(String name) { 6 | super(name, "Director", 5000); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution2/SeniorManager.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class SeniorManager extends AbstractRole { 4 | 5 | public SeniorManager(String name) { 6 | super(name, "Senior Manager", 1000); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution2/VicePresident.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class VicePresident extends AbstractRole { 4 | 5 | public VicePresident(String name) { 6 | super(name, "Vice President", 10000); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution3/CEO.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class CEO extends AbstractRole { 4 | private static CEO ceo; 5 | 6 | private CEO(String name) { 7 | super(name, "CEO", 10000); 8 | } 9 | public static CEO getInstance() { 10 | if(ceo == null) 11 | ceo = new CEO("ceo"); 12 | return ceo; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution3/Director.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class Director extends AbstractRole { 4 | 5 | public Director(String name) { 6 | super(name, "Director", 5000); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution3/SeniorManager.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class SeniorManager extends AbstractRole { 4 | 5 | public SeniorManager(String name) { 6 | super(name, "Senior Manager", 1000); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /2019-aug/12.chain of responsibility pattern/src/com/alg/oodesign/solution3/VicePresident.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class VicePresident extends AbstractRole { 4 | 5 | public VicePresident(String name) { 6 | super(name, "Vice President", 10000); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/13.proxy-pattern/src/com/alg/oodesign/solution2/IImageProxy.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | interface IImageProxy { 4 | void display() throws Exception; 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution1/AlloyWheels.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class AlloyWheels implements IWheels { 4 | 5 | public String toString() { 6 | return "Alloy Wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution1/Automatic.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Automatic implements IGearBox { 4 | 5 | public String toString() { 6 | return "Automatic Gearbox"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution1/Hybrid.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Hybrid implements IGearBox { 4 | public String toString() { 5 | return "Hybrid Gearbox"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution1/IGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public interface IGearBox { 4 | } 5 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution1/IWheels.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public interface IWheels { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution1/Manual.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Manual implements IGearBox { 4 | public String toString() { 5 | return "Manual Gearbox"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution1/StandardWheels.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class StandardWheels implements IWheels { 4 | 5 | public String toString() { 6 | return "Standard Wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/AlloyWheels.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class AlloyWheels implements IWheels { 4 | 5 | public String toString() { 6 | return "Alloy Wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/Automatic.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Automatic implements IGearBox { 4 | 5 | public String toString() { 6 | return "Automatic Gearbox"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/EconomyFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class EconomyFactory implements IFactory { 4 | 5 | @Override 6 | public IGearBox getGearBox() { 7 | return new Manual(); 8 | } 9 | 10 | @Override 11 | public IWheels getWheels() { 12 | return new StandardWheels(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/Hybrid.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Hybrid implements IGearBox { 4 | public String toString() { 5 | return "Hybrid Gearbox"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/IFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IFactory { 4 | IGearBox getGearBox(); 5 | IWheels getWheels(); 6 | } 7 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/IGearBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IGearBox { 4 | } 5 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/IWheels.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IWheels { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/LuxuryFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class LuxuryFactory implements IFactory { 4 | 5 | @Override 6 | public IGearBox getGearBox() { 7 | return new Hybrid(); 8 | } 9 | 10 | @Override 11 | public IWheels getWheels() { 12 | return new AlloyWheels(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/Manual.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Manual implements IGearBox { 4 | public String toString() { 5 | return "Manual Gearbox"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/MediumFactory.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class MediumFactory implements IFactory { 4 | 5 | @Override 6 | public IGearBox getGearBox() { 7 | return new Automatic(); 8 | } 9 | 10 | @Override 11 | public IWheels getWheels() { 12 | return new StandardWheels(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/14.abstract factory pattern/src/com/alg/oodesign/solution2/StandardWheels.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class StandardWheels implements IWheels { 4 | 5 | public String toString() { 6 | return "Standard Wheels"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /2019-aug/15.simple factory method pattern/dummy: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019-aug/16.bridge pattern/src/com/alg/oodesign/solution1/Factory.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Factory { 4 | 5 | public static IConnection getConnection(String url, String username, String password) { 6 | if(url.equals("oracle")) 7 | return new OracleConnection(); 8 | if(url.equals("mysql")) 9 | return new MySqlConnection(); 10 | return null; 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /2019-aug/16.bridge pattern/src/com/alg/oodesign/solution1/IConnection.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public interface IConnection { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/16.bridge pattern/src/com/alg/oodesign/solution1/MySqlConnection.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class MySqlConnection implements IConnection { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/16.bridge pattern/src/com/alg/oodesign/solution1/OracleConnection.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class OracleConnection implements IConnection { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/16.bridge pattern/src/com/alg/oodesign/solution1/PersistentConnection.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class PersistentConnection extends AbstractSmartConnection { 4 | 5 | public PersistentConnection(String username, String password) { 6 | super(username, password); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | public void setMaxLife(long time) { 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/16.bridge pattern/src/com/alg/oodesign/solution1/PooledConnection.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class PooledConnection extends AbstractSmartConnection { 4 | 5 | public PooledConnection(String username, String password) { 6 | super(username, password); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | public void setPoolSize(int size) { 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/16.bridge pattern/src/com/alg/oodesign/solution1/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | PersistentConnection p1 = new PersistentConnection("abc", "123"); 7 | p1.setMaxLife(20); 8 | p1.connect("oracle"); 9 | System.out.println(p1); 10 | 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution1/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Coffee c1 = new Coffee(); 7 | c1.makeCoffee(); 8 | Tea t1 = new Tea(); 9 | t1.makeTea(); 10 | 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution2/Recipe.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public abstract class Recipe { 4 | 5 | protected void boilWater() { 6 | System.out.println("boiling water"); 7 | } 8 | protected void pour() { 9 | System.out.println("pour into cup"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution2/Tea.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Tea extends Recipe { 4 | 5 | private void addPowder() { 6 | System.out.println("Tea Powder added"); 7 | } 8 | private void addIngredients() { 9 | System.out.println("Added lemon"); 10 | } 11 | public void makeTea() { 12 | boilWater(); 13 | addPowder(); 14 | pour(); 15 | addIngredients(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution2/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Coffee c1 = new Coffee(); 7 | c1.makeCoffee(); 8 | Tea t1 = new Tea(); 9 | t1.makeTea(); 10 | //Recipe r = new Recipe(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution3/Coffee.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class Coffee extends Recipe { 4 | 5 | protected void addPowder() { 6 | System.out.println("Coffee Powder added"); 7 | } 8 | protected void addIngredients() { 9 | System.out.println("Added sugar and milk"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution3/Tea.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class Tea extends Recipe { 4 | 5 | protected void addPowder() { 6 | System.out.println("Tea Powder added"); 7 | } 8 | protected void addIngredients() { 9 | System.out.println("Added lemon"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution3/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Coffee c1 = new Coffee(); 7 | c1.makeRecipe(); 8 | System.out.println(); 9 | Tea t1 = new Tea(); 10 | t1.makeRecipe(); 11 | //Recipe r = new Recipe(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution4/Coffee.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class Coffee extends Recipe { 4 | 5 | public Coffee(boolean needIngredients) { 6 | super(needIngredients); 7 | } 8 | protected void addPowder() { 9 | System.out.println("Coffee Powder added"); 10 | } 11 | protected void addIngredients() { 12 | System.out.println("Added sugar and milk"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/2.template-method/src/com/alg/oodesign/solution4/Tea.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class Tea extends Recipe { 4 | 5 | public Tea(boolean needIngredients) { 6 | super(needIngredients); 7 | } 8 | protected void addPowder() { 9 | System.out.println("Tea Powder added"); 10 | } 11 | protected void addIngredients() { 12 | System.out.println("Added lemon"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/3.state-pattern/src/com/alg/oodesign/solution1/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | GumballMachine gbm = new GumballMachine(); 7 | gbm.turnHandle(); 8 | gbm.addGumballs(10); 9 | gbm.turnHandle(); 10 | gbm.insertCoin(); 11 | gbm.turnHandle(); 12 | System.out.println(gbm); 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/3.state-pattern/src/com/alg/oodesign/solution2/IState.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IState { 4 | void addGumballs(GumballMachine gbm, int count); 5 | void insertCoin(GumballMachine gbm); 6 | void turnHandle(GumballMachine gbm); 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/3.state-pattern/src/com/alg/oodesign/solution2/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | GumballMachine gbm = new GumballMachine(); 7 | gbm.turnHandle(); 8 | gbm.addGumballs(10); 9 | gbm.turnHandle(); 10 | gbm.insertCoin(); 11 | gbm.turnHandle(); 12 | System.out.println(gbm); 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/3.state-pattern/src/com/alg/oodesign/solution3/IGumballMachine.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public interface IGumballMachine { 4 | void addGumballs(int count); 5 | void insertCoin(); 6 | void turnHandle(); 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/3.state-pattern/src/com/alg/oodesign/solution3/IState.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public interface IState { 4 | void addGumballs(GumballMachine gbm, int count); 5 | void insertCoin(GumballMachine gbm); 6 | void turnHandle(GumballMachine gbm); 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/3.state-pattern/src/com/alg/oodesign/solution3/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | IGumballMachine gbm = new GumballMachine(); 7 | gbm.turnHandle(); 8 | gbm.addGumballs(10); 9 | gbm.turnHandle(); 10 | gbm.insertCoin(); 11 | gbm.turnHandle(); 12 | System.out.println(gbm); 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/4.iterator pattern/src/com/alg/oodesign/solution2/Iterator.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface Iterator { 4 | boolean hasNext(); 5 | MenuItem next(); 6 | void reset(); 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/4.iterator pattern/src/com/alg/oodesign/solution31/Iterator.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution31; 2 | 3 | public interface Iterator { 4 | boolean hasNext(); 5 | MenuItem next(); 6 | void reset(); 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/4.iterator pattern/src/com/alg/oodesign/solution32/Iterator.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution32; 2 | 3 | public interface Iterator { 4 | boolean hasNext(); 5 | MenuItem next(); 6 | void reset(); 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution1/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | int[] in = new int[100]; 7 | IntegerSorter.sort(in, "bubblesort"); 8 | 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution2/BubbleIntegerrSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class BubbleIntegerrSorter extends IntegerSorter { 4 | 5 | @Override 6 | void sort(int[] in) { 7 | System.out.println("sort the array using bubblesort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution2/IntegerSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public abstract class IntegerSorter { 4 | abstract void sort(int[] in); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution2/MergeIntegerSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class MergeIntegerSorter extends IntegerSorter { 4 | 5 | @Override 6 | void sort(int[] in) { 7 | System.out.println("sort integer array using merge sort algorithm"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution2/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | int[] in = new int[100]; 7 | IntegerSorter sorter = new BubbleIntegerrSorter(); 8 | sorter.sort(in); 9 | sorter = new MergeIntegerSorter(); 10 | sorter.sort(in); 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution3/AscBubbleIntegerrSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class AscBubbleIntegerrSorter extends IntegerSorter { 4 | 5 | @Override 6 | void sort(int[] in) { 7 | System.out.println("sort the array in increasing order using bubblesort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution3/AscMergeIntegerSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class AscMergeIntegerSorter extends IntegerSorter { 4 | 5 | @Override 6 | void sort(int[] in) { 7 | System.out.println("sort integer array in ascending order using merge sort algorithm"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution3/DescBubbleIntegerrSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class DescBubbleIntegerrSorter extends IntegerSorter { 4 | 5 | @Override 6 | void sort(int[] in) { 7 | System.out.println("sort the array in descending order using bubblesort"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution3/DescMergeIntegerSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class DescMergeIntegerSorter extends IntegerSorter { 4 | 5 | @Override 6 | void sort(int[] in) { 7 | System.out.println("sort integer in descending order array using merge sort algorithm"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution3/IntegerSorter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public abstract class IntegerSorter { 4 | abstract void sort(int[] in); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution3/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | int[] in = new int[100]; 7 | IntegerSorter sorter = new AscBubbleIntegerrSorter(); 8 | sorter.sort(in); 9 | sorter = new AscMergeIntegerSorter(); 10 | sorter.sort(in); 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution4/AscCmpStrateggy.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class AscCmpStrateggy implements ICompareStrategy { 4 | 5 | @Override 6 | public int cmp(int e1, int e2) { 7 | // TODO Auto-generated method stub 8 | return 0; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution4/BubbleSortStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class BubbleSortStrategy implements ISortStrategy { 4 | 5 | @Override 6 | public void sort(int[] in, ICompareStrategy cmp) { 7 | // TODO Auto-generated method stub 8 | 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution4/DescCmpStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class DescCmpStrategy implements ICompareStrategy { 4 | 5 | @Override 6 | public int cmp(int e1, int e2) { 7 | // TODO Auto-generated method stub 8 | return 0; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution4/ICompareStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public interface ICompareStrategy { 4 | int cmp(int e1, int e2); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution4/ISortStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public interface ISortStrategy { 4 | void sort(int[] in, ICompareStrategy cmp); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution4/MergeSortStrategy.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class MergeSortStrategy implements ISortStrategy { 4 | 5 | @Override 6 | public void sort(int[] in, ICompareStrategy cmp) { 7 | // TODO Auto-generated method stub 8 | 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/5.strategy-pattern/src/com/alg/oodesign/solution4/Test.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | int[] in = new int[100]; 7 | IntegerSorter sorter = new IntegerSorter(); 8 | sorter.setCompareStrategy(new AscCmpStrateggy() ); 9 | sorter.setSortStrategy(new BubbleSortStrategy() ); 10 | sorter.sort(in); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/6.observer pattern/src/com/alg/oodesign/solution1/CurrentConditionsDisplay.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class CurrentConditionsDisplay { 4 | 5 | public void update(Weather w) { 6 | System.out.println("Current Conditions Display"); 7 | System.out.println("Temp:" + w.getTemp()); 8 | System.out.println("Pressure:" + w.getPressure()); 9 | System.out.println("Humidity:" + w.getHumidity()); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /2019-aug/6.observer pattern/src/com/alg/oodesign/solution2/IDisplay.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IDisplay { 4 | void update(Weather w); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution1/CLowerButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class CLowerButton { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution1/CRaiseButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class CRaiseButton { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution1/TempBar.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class TempBar { 4 | private float temp; 5 | 6 | public void display(float temp) { 7 | this.temp = temp; 8 | System.out.println("Temp bar:" + temp); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution1/Utils.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Utils { 4 | 5 | public static float convertCF(float tempInC) { 6 | return tempInC * 9.0f/5; 7 | } 8 | public static float convertFC(float tempInF) { 9 | return tempInF * 5.0f/9; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/CLowerButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class CLowerButton implements IButton { 4 | private IMediator mediator; 5 | 6 | public CLowerButton(IMediator mediator) { 7 | super(); 8 | this.mediator = mediator; 9 | } 10 | 11 | public void onClick() { 12 | System.out.println("Lower Button for Celsius is pressed"); 13 | mediator.notify(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/CRaiseButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class CRaiseButton implements IButton { 4 | private IMediator mediator; 5 | 6 | public CRaiseButton(IMediator mediator) { 7 | super(); 8 | this.mediator = mediator; 9 | } 10 | 11 | public void onClick() { 12 | System.out.println("Raise Button for Celsius is pressed"); 13 | mediator.notify(this); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/FLowerButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class FLowerButton implements IButton { 4 | private IMediator mediator; 5 | 6 | public FLowerButton(IMediator mediator) { 7 | super(); 8 | this.mediator = mediator; 9 | } 10 | 11 | public void onClick() { 12 | System.out.println("Lower Button for Forenheit is pressed"); 13 | mediator.notify(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/FRaiseButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class FRaiseButton implements IButton { 4 | private IMediator mediator; 5 | 6 | public FRaiseButton(IMediator mediator) { 7 | super(); 8 | this.mediator = mediator; 9 | } 10 | 11 | public void onClick() { 12 | System.out.println("Raise Button for Forenheit is pressed"); 13 | mediator.notify(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/IButton.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IButton { 4 | void onClick(); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/IEditBox.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IEditBox { 4 | void change(float temp); 5 | void update(float temp); 6 | float getTemp(); 7 | } 8 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/IMediator.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public interface IMediator { 4 | void notify(IEditBox editbox, float temp); 5 | void notify(IButton button); 6 | } 7 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/TempBar.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class TempBar { 4 | private float temp; 5 | 6 | public void display(float temp) { 7 | this.temp = temp; 8 | System.out.println("Temp bar:" + temp); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/7.mediator pattern/src/com/alg/oodesign/solution2/Utils.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Utils { 4 | 5 | public static float convertCF(float tempInC) { 6 | return tempInC * 9.0f/5; 7 | } 8 | public static float convertFC(float tempInF) { 9 | return tempInF * 5.0f/9; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution1/Book.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Book extends AbstractItem { 4 | 5 | public Book(String name, float weight) { 6 | super(name, weight); 7 | } 8 | 9 | @Override 10 | public float getCost() { 11 | return 0.03f * getWeight() + 5; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution1/Letter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class Letter extends AbstractItem { 4 | 5 | public Letter(String name, float weight) { 6 | super(name, weight); 7 | } 8 | 9 | @Override 10 | public float getCost() { 11 | return 0.02f * getWeight() + 3; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution2/Book.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Book extends AbstractItem { 4 | 5 | public Book(String name, float weight) { 6 | super(name, weight); 7 | } 8 | 9 | @Override 10 | public float getCost() { 11 | return 0.03f * getWeight() + 5; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution2/Letter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class Letter extends AbstractItem { 4 | 5 | public Letter(String name, float weight) { 6 | super(name, weight); 7 | } 8 | 9 | @Override 10 | public float getCost() { 11 | return 0.02f * getWeight() + 3; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution3/Book.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class Book extends AbstractItem { 4 | 5 | public Book(String name, float weight) { 6 | super(name, weight); 7 | setCost(0.03f * getWeight() + 5); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution3/IVisitor.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public interface IVisitor { 4 | void visit(AbstractItem item); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution3/Letter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class Letter extends AbstractItem { 4 | 5 | public Letter(String name, float weight) { 6 | super(name, weight); 7 | setCost(0.02f * getWeight() + 3); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution3/WeightVisitor.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class WeightVisitor implements IVisitor { 4 | 5 | @Override 6 | public void visit(AbstractItem item) { 7 | float total = 0.0f; 8 | for(AbstractItem tmp: item.getChildren()) 9 | total += tmp.getWeight(); 10 | System.out.println(total); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution4/Book.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class Book extends AbstractItem { 4 | 5 | public Book(String name, float weight) { 6 | super(name, weight); 7 | setCost(0.03f * getWeight() + 5); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution4/IVisitor.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public interface IVisitor { 4 | void visit(AbstractItem item); 5 | void visit(Box item); 6 | } 7 | -------------------------------------------------------------------------------- /2019-aug/8.composite-visitor patterns/src/alg/oodesign/solution4/Letter.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class Letter extends AbstractItem { 4 | 5 | public Letter(String name, float weight) { 6 | super(name, weight); 7 | setCost(0.02f * getWeight() + 3); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution0/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution0; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie(String id, float price, int quantity, float weight) { 6 | super(id, price, quantity, weight); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | public String getDetails() { 11 | return super.getDetails() + " Square Cookie"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution1/AbstractCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class AbstractCookie { 4 | private String id; 5 | private float price; 6 | 7 | public AbstractCookie(String id, float price) { 8 | super(); 9 | this.id = id; 10 | this.price = price; 11 | } 12 | 13 | public String getDetails() { 14 | return id + "," + price; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution1/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie(String id, float price) { 6 | super(id, price); 7 | } 8 | 9 | public String getDetails() { 10 | return super.getDetails() + " Circle Cookie"; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution1/NutsCircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class NutsCircleCookie extends CircleCookie { 4 | private int quantity; 5 | 6 | public NutsCircleCookie(String id, float price, int quantity) { 7 | super(id, price); 8 | this.quantity = quantity; 9 | } 10 | public String getDetails() { 11 | return super.getDetails() + " nuts" + quantity ; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution1/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution1; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie(String id, float price) { 6 | super(id, price); 7 | } 8 | 9 | public String getDetails() { 10 | return super.getDetails() + " Square Cookie"; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution2/AbstractCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class AbstractCookie { 4 | private String id; 5 | private float price; 6 | 7 | public AbstractCookie(String id, float price) { 8 | super(); 9 | this.id = id; 10 | this.price = price; 11 | } 12 | 13 | public String getDetails() { 14 | return id + "," + price; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution2/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie(String id, float price) { 6 | super(id, price); 7 | } 8 | 9 | public String getDetails() { 10 | return super.getDetails() + " Circle Cookie"; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution2/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution2; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie(String id, float price) { 6 | super(id, price); 7 | } 8 | 9 | public String getDetails() { 10 | return super.getDetails() + " Square Cookie"; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution3/AbstractCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class AbstractCookie implements ICookie { 4 | private String id; 5 | private float price; 6 | 7 | public AbstractCookie(String id, float price) { 8 | super(); 9 | this.id = id; 10 | this.price = price; 11 | } 12 | 13 | public String getDetails() { 14 | return id + "," + price; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution3/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie(String id, float price) { 6 | super(id, price); 7 | } 8 | 9 | public String getDetails() { 10 | return super.getDetails() + " Circle Cookie"; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution3/ICookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public interface ICookie { 4 | String getDetails(); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution3/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution3; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie(String id, float price) { 6 | super(id, price); 7 | } 8 | 9 | public String getDetails() { 10 | return super.getDetails() + " Square Cookie"; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution4/CircleCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class CircleCookie extends AbstractCookie { 4 | 5 | public CircleCookie(String id, float price) { 6 | super(id, price); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | public String getDetails() { 11 | return super.getDetails() + " Circle Cookie"; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution4/IDecorator.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public interface IDecorator { 4 | String getDecorationDetails(); 5 | } 6 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution4/NutsDecorator.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class NutsDecorator implements IDecorator { 4 | private int quantity; 5 | 6 | public NutsDecorator(int quantity) { 7 | super(); 8 | this.quantity = quantity; 9 | } 10 | 11 | @Override 12 | public String getDecorationDetails() { 13 | return " nuts " + quantity; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution4/SprinklesDecorator.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class SprinklesDecorator implements IDecorator { 4 | private float weight; 5 | 6 | public SprinklesDecorator(float weight) { 7 | super(); 8 | this.weight = weight; 9 | } 10 | 11 | @Override 12 | public String getDecorationDetails() { 13 | return " sprinkles " + weight; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2019-aug/9.decorator-pattern/src/com/alg/oodesign/solution4/SquareCookie.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.solution4; 2 | 3 | public class SquareCookie extends AbstractCookie { 4 | 5 | public SquareCookie(String id, float price) { 6 | super(id, price); 7 | // TODO Auto-generated constructor stub 8 | } 9 | 10 | public String getDetails() { 11 | return super.getDetails() + " Square Cookie"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /2019-aug/assignments/Assignment1(template, state).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/assignments/Assignment1(template, state).pdf -------------------------------------------------------------------------------- /2019-aug/assignments/Assignment2(strategy, iterator).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/assignments/Assignment2(strategy, iterator).pdf -------------------------------------------------------------------------------- /2019-aug/assignments/Assignment3(observer, mediator).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/assignments/Assignment3(observer, mediator).pdf -------------------------------------------------------------------------------- /2019-aug/assignments/Assignment4(composite, visitor, iterator).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/assignments/Assignment4(composite, visitor, iterator).pdf -------------------------------------------------------------------------------- /2019-aug/assignments/Assignment5(decorator, adapter).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/assignments/Assignment5(decorator, adapter).pdf -------------------------------------------------------------------------------- /2019-aug/assignments/Assignment6(theory questions).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/assignments/Assignment6(theory questions).pdf -------------------------------------------------------------------------------- /2019-aug/assignments/Project1-Snake Ladder Game.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/assignments/Project1-Snake Ladder Game.pdf -------------------------------------------------------------------------------- /2019-aug/assignments/Project2-Editor.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/assignments/Project2-Editor.pdf -------------------------------------------------------------------------------- /2019-aug/simple notepad design/src/com/alg/oodesign/editor/model/AbstractCommand.java: -------------------------------------------------------------------------------- 1 | package com.alg.oodesign.editor.model; 2 | 3 | public abstract class AbstractCommand { 4 | protected BufferManager target; 5 | 6 | public AbstractCommand(BufferManager target) { 7 | this.target = target; 8 | } 9 | abstract boolean isUndoable(); 10 | abstract void execute(); 11 | abstract void unexecute(); 12 | } 13 | -------------------------------------------------------------------------------- /2019-aug/snake-ladder game design/board6x6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/snake-ladder game design/board6x6.jpg -------------------------------------------------------------------------------- /2019-aug/windows application design/board6x6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algorithmica-repository/design-patterns/3e2bc6b7ad5ac46884d40b7938c09484be2ee12f/2019-aug/windows application design/board6x6.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # design-patterns 2 | It consists of all code examples discussed as part of design patterns course at algorithmica 3 | --------------------------------------------------------------------------------