├── out └── production │ └── Behaioral DPs │ ├── META-INF │ └── Behaioral DPs.kotlin_module │ ├── problem │ └── Editor.class │ ├── solution │ ├── Editor.class │ ├── History.class │ └── EditorState.class │ ├── interpretter │ ├── Client.class │ ├── Expression.class │ ├── InterpreterClient.class │ ├── IntToHexExpression.class │ ├── InterpreterContext.class │ └── IntToBinaryExpression.class │ ├── state │ ├── problem │ │ ├── Canvas.class │ │ ├── ToolType.class │ │ └── Canvas$WhenMappings.class │ └── solution │ │ ├── Tool.class │ │ ├── Canvas.class │ │ ├── Client.class │ │ ├── states │ │ ├── BrushTool.class │ │ └── SelectionTool.class │ │ └── ex_real_scenario │ │ ├── Mail.class │ │ ├── Client.class │ │ └── base │ │ ├── MailState.class │ │ ├── MailStateC.class │ │ ├── OrderedState.class │ │ ├── ReceivedState.class │ │ └── DeliveredState.class │ ├── command │ ├── problem │ │ └── Button.class │ └── solution │ │ ├── Button.class │ │ ├── ICommand.class │ │ ├── ex2 │ │ ├── TvOn.class │ │ ├── Client.class │ │ ├── TvDown.class │ │ ├── TvRemote.class │ │ ├── base │ │ │ ├── Television.class │ │ │ └── ElectronicService.class │ │ └── TvRemote$Companion.class │ │ ├── ex1 │ │ ├── Client.class │ │ ├── AddCustomer.class │ │ └── CustomerService.class │ │ ├── editor │ │ ├── Client.class │ │ ├── History.class │ │ ├── BoldCommand.class │ │ ├── HTMLDocument.class │ │ └── base │ │ │ ├── ICommand.class │ │ │ ├── UndoCommand.class │ │ │ └── UndoableICommand.class │ │ └── ex3_photoshop │ │ ├── Client.class │ │ ├── RedEyesCommand.class │ │ ├── BlackWhiteImage.class │ │ ├── CompositeCommand.class │ │ └── ResizeImageCommand.class │ ├── memento │ ├── problem │ │ └── Client.class │ └── solution │ │ ├── Client1.class │ │ └── Client2.class │ ├── observer │ ├── problwm │ │ ├── Chart.class │ │ ├── DataSource.class │ │ └── SpreadSheet.class │ └── solution │ │ ├── new │ │ ├── Chart.class │ │ ├── Client.class │ │ ├── Observer.class │ │ ├── DataSource.class │ │ └── SpreadSheet.class │ │ ├── old │ │ ├── Client$1.class │ │ ├── Client.class │ │ ├── Observer.class │ │ └── DataSourceObserver.class │ │ └── gof_book │ │ ├── Data.class │ │ ├── CLient.class │ │ ├── Observer.class │ │ ├── Person.class │ │ ├── DaysAttend.class │ │ ├── IObserver.class │ │ ├── Observable.class │ │ ├── AbstractModel.class │ │ ├── TotalDegree.class │ │ └── IObserverSource.class │ ├── visitor │ ├── problem │ │ ├── Client.class │ │ ├── IPost.class │ │ ├── EventPost.class │ │ ├── LivePost.class │ │ └── PostsManager.class │ └── soltuion │ │ ├── IPost.class │ │ ├── Client.class │ │ ├── NewsPost.class │ │ ├── Visitor.class │ │ ├── StreamPost.class │ │ ├── GeneralPost.class │ │ ├── PostsManager.class │ │ ├── ArchiveOperation.class │ │ └── PublishOperation.class │ ├── iterator │ ├── problem │ │ ├── Client.class │ │ └── BrowserHistory.class │ └── solution │ │ ├── Client.class │ │ ├── BrowseHistory.class │ │ └── base │ │ ├── Iterator.class │ │ ├── ListIterator.class │ │ └── ArrayIterator.class │ ├── mediator │ ├── problem │ │ ├── Button.class │ │ ├── ListBox.class │ │ ├── TextBox.class │ │ └── UiControl.class │ └── solution │ │ ├── Button.class │ │ ├── Client.class │ │ ├── ListBox.class │ │ ├── TextBox.class │ │ ├── DialogBox.class │ │ ├── UiControl.class │ │ └── ArticlesDialogBox.class │ ├── strategy │ ├── solution │ │ ├── Client.class │ │ ├── Filter.class │ │ ├── Compresser.class │ │ ├── ImageStorage.class │ │ ├── filters │ │ │ ├── ContractFilter.class │ │ │ └── BlackWhiteFilter.class │ │ └── compressors │ │ │ ├── JPEGCompressor.class │ │ │ └── PNGCompressor.class │ └── problem │ │ └── ImageStorage.class │ ├── templatemethod │ ├── problem │ │ ├── Client.class │ │ ├── Creep.class │ │ ├── ItalianCreep.class │ │ └── BrazalianCreep.class │ └── solution │ │ ├── Client.class │ │ ├── types │ │ ├── Creep.class │ │ ├── ItalianCreep.class │ │ └── BrazilianCreep.class │ │ └── SandWishMaker.class │ └── ChainOfResponsipilities │ ├── HttpRequest.class │ ├── problem │ ├── Client.class │ ├── Logger.class │ ├── Compressor.class │ └── Authenticator.class │ └── solution │ ├── Webserver.class │ ├── ex │ ├── Client.class │ ├── Logger.class │ ├── Handler.class │ ├── WebServer.class │ ├── Compressor.class │ ├── Encryption.class │ └── Authenticator.class │ └── my_ex │ ├── Client.class │ ├── Logger.class │ ├── Compressor.class │ ├── TaskHandler.class │ └── Authenticator.class ├── src ├── mediator │ ├── problem │ │ ├── UiControl.kt │ │ ├── TextBox.kt │ │ ├── Button.kt │ │ └── ListBox.kt │ └── solution │ │ ├── UiControl.kt │ │ ├── DialogBox.kt │ │ ├── Client.java │ │ ├── TextBox.kt │ │ ├── ListBox.kt │ │ ├── Button.kt │ │ └── ArticlesDialogBox.kt ├── visitor │ ├── problem │ │ ├── IPost.kt │ │ ├── LivePost.kt │ │ ├── EventPost.kt │ │ ├── PostsManager.kt │ │ └── Client.kt │ └── soltuion │ │ ├── IPost.kt │ │ ├── GeneralPost.kt │ │ ├── NewsPost.kt │ │ ├── StreamPost.kt │ │ ├── Visitor.kt │ │ ├── PostsManager.kt │ │ ├── PublishOperation.kt │ │ ├── ArchiveOperation.kt │ │ └── Client.kt ├── command │ ├── solution │ │ ├── ICommand.kt │ │ ├── editor │ │ │ ├── base │ │ │ │ ├── ICommand.kt │ │ │ │ ├── UndoableICommand.kt │ │ │ │ └── UndoCommand.kt │ │ │ ├── HTMLDocument.kt │ │ │ ├── History.kt │ │ │ ├── BoldCommand.kt │ │ │ └── Client.java │ │ ├── Button.kt │ │ ├── ex1 │ │ │ ├── CustomerService.kt │ │ │ ├── AddCustomer.kt │ │ │ └── Client.java │ │ ├── ex2 │ │ │ ├── base │ │ │ │ ├── ElectronicService.kt │ │ │ │ └── Television.kt │ │ │ ├── TvOn.kt │ │ │ ├── TvDown.kt │ │ │ ├── TvRemote.kt │ │ │ └── Client.java │ │ └── ex3_photoshop │ │ │ ├── RedEyesCommand.kt │ │ │ ├── BlackWhiteImage.kt │ │ │ ├── ResizeImageCommand.kt │ │ │ ├── CompositeCommand.kt │ │ │ └── Client.java │ └── problem │ │ └── Button.kt ├── state │ ├── solution │ │ ├── Tool.kt │ │ ├── states │ │ │ ├── BrushTool.kt │ │ │ └── SelectionTool.kt │ │ ├── Canvas.kt │ │ ├── ex_real_scenario │ │ │ ├── base │ │ │ │ ├── MailState.kt │ │ │ │ ├── DeliveredState.kt │ │ │ │ ├── OrderedState.kt │ │ │ │ └── ReceivedState.kt │ │ │ ├── Mail.kt │ │ │ └── Client.java │ │ └── Client.java │ └── problem │ │ ├── ToolType.kt │ │ └── Canvas.kt ├── strategy │ ├── solution │ │ ├── Filter.kt │ │ ├── Compresser.kt │ │ ├── ImageStorage.kt │ │ ├── filters │ │ │ ├── ContractFilter.kt │ │ │ └── BlackWhiteFilter.kt │ │ ├── compressors │ │ │ ├── JPEGCompressor.kt │ │ │ └── PNGCompressor.kt │ │ └── Client.java │ └── problem │ │ └── ImageStorage.kt ├── observer │ ├── solution │ │ ├── new │ │ │ ├── Observer.kt │ │ │ ├── Chart.kt │ │ │ ├── SpreadSheet.kt │ │ │ ├── DataSource.kt │ │ │ └── Client.kt │ │ ├── old │ │ │ ├── Observer.kt │ │ │ ├── DataSourceObserver.kt │ │ │ └── Client.java │ │ └── gof_book │ │ │ ├── DaysAttend.kt │ │ │ ├── TotalDegree.kt │ │ │ ├── AbstractModel.kt │ │ │ ├── Person.kt │ │ │ ├── Observer.kt │ │ │ ├── Observable.kt │ │ │ └── CLient.kt │ └── problwm │ │ ├── Chart.kt │ │ ├── SpreadSheet.kt │ │ └── DataSource.kt ├── interpretter │ ├── Expression.kt │ ├── IntToBinaryExpression.kt │ ├── IntToHexExpression.kt │ ├── InterpreterContext.kt │ ├── InterpreterClient.kt │ └── Client.kt ├── memento │ ├── solution │ │ ├── EditorState.kt │ │ ├── Editor.kt │ │ ├── History.kt │ │ ├── Client2.java │ │ └── Client1.java │ └── problem │ │ ├── Client.java │ │ └── Editor.kt ├── iterator │ ├── solution │ │ ├── base │ │ │ ├── Iterator.kt │ │ │ ├── ListIterator.kt │ │ │ └── ArrayIterator.kt │ │ ├── BrowseHistory.kt │ │ └── Client.java │ └── problem │ │ ├── Client.java │ │ └── BrowserHistory.kt ├── chainofResponsipilities │ ├── HttpRequest.kt │ ├── solution │ │ ├── Webserver.kt │ │ ├── ex │ │ │ ├── WebServer.kt │ │ │ ├── Logger.kt │ │ │ ├── Compressor.kt │ │ │ ├── Encryption.kt │ │ │ ├── Authenticator.kt │ │ │ ├── Handler.kt │ │ │ └── Client.kt │ │ └── my_ex │ │ │ ├── Logger.kt │ │ │ ├── Compressor.kt │ │ │ ├── Authenticator.kt │ │ │ ├── TaskHandler.kt │ │ │ └── Client.kt │ └── problem │ │ ├── Logger.kt │ │ ├── Compressor.kt │ │ ├── Authenticator.kt │ │ └── Client.kt └── templatemethod │ ├── solution │ ├── Client.java │ ├── types │ │ ├── Creep.kt │ │ ├── BrazilianCreep.kt │ │ └── ItalianCreep.kt │ └── SandWishMaker.kt │ └── problem │ ├── ItalianCreep.kt │ ├── BrazalianCreep.kt │ ├── Client.java │ └── Creep.kt ├── .idea ├── vcs.xml ├── kotlinc.xml ├── .gitignore ├── misc.xml ├── modules.xml └── libraries │ └── KotlinJavaRuntime.xml └── Behaioral DPs.iml /out/production/Behaioral DPs/META-INF/Behaioral DPs.kotlin_module: -------------------------------------------------------------------------------- 1 | "* -------------------------------------------------------------------------------- /src/mediator/problem/UiControl.kt: -------------------------------------------------------------------------------- 1 | package mediator.problem 2 | 3 | open class UiControl { 4 | } -------------------------------------------------------------------------------- /src/visitor/problem/IPost.kt: -------------------------------------------------------------------------------- 1 | package visitor.problem 2 | 3 | interface IPost { 4 | fun publish() 5 | } -------------------------------------------------------------------------------- /src/mediator/solution/UiControl.kt: -------------------------------------------------------------------------------- 1 | package mediator.solution 2 | 3 | open class UiControl(var owner: DialogBox) -------------------------------------------------------------------------------- /src/command/solution/ICommand.kt: -------------------------------------------------------------------------------- 1 | package command.solution 2 | 3 | interface ICommand { 4 | fun execute() 5 | } -------------------------------------------------------------------------------- /src/state/solution/Tool.kt: -------------------------------------------------------------------------------- 1 | package state.solution 2 | 3 | interface Tool { 4 | fun moveUp() 5 | fun moveDown() 6 | } -------------------------------------------------------------------------------- /src/strategy/solution/Filter.kt: -------------------------------------------------------------------------------- 1 | package strategy.solution 2 | 3 | interface Filter { 4 | fun apply(fileName: String) 5 | } -------------------------------------------------------------------------------- /src/visitor/soltuion/IPost.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | interface IPost { 4 | fun execute(visitor: Visitor) 5 | } -------------------------------------------------------------------------------- /src/command/solution/editor/base/ICommand.kt: -------------------------------------------------------------------------------- 1 | package command.solution.editor.base 2 | 3 | interface ICommand { 4 | fun execute() 5 | } -------------------------------------------------------------------------------- /src/state/problem/ToolType.kt: -------------------------------------------------------------------------------- 1 | package state.problem 2 | 3 | enum class ToolType { 4 | SELECTION, 5 | BRUSH, 6 | ERASER 7 | } -------------------------------------------------------------------------------- /src/strategy/solution/Compresser.kt: -------------------------------------------------------------------------------- 1 | package strategy.solution 2 | 3 | interface Compresser { 4 | fun compress(fileName: String) 5 | } -------------------------------------------------------------------------------- /src/observer/solution/new/Observer.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.new 2 | 3 | interface Observer { 4 | fun onChanged(value: String) 5 | } -------------------------------------------------------------------------------- /src/mediator/solution/DialogBox.kt: -------------------------------------------------------------------------------- 1 | package mediator.solution 2 | 3 | abstract class DialogBox { 4 | abstract fun changed(uiControl: UiControl) 5 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/problem/Editor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/problem/Editor.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/solution/Editor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/solution/Editor.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/solution/History.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/solution/History.class -------------------------------------------------------------------------------- /src/command/solution/editor/base/UndoableICommand.kt: -------------------------------------------------------------------------------- 1 | package command.solution.editor.base 2 | 3 | interface UndoableICommand : ICommand { 4 | fun unExecute() 5 | } -------------------------------------------------------------------------------- /src/interpretter/Expression.kt: -------------------------------------------------------------------------------- 1 | package interpretter 2 | 3 | interface Expression { 4 | fun interpret(interpreterContext: InterpreterContext) : String 5 | } 6 | -------------------------------------------------------------------------------- /out/production/Behaioral DPs/interpretter/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/interpretter/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/solution/EditorState.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/solution/EditorState.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/problem/Canvas.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/problem/Canvas.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/Tool.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/Tool.class -------------------------------------------------------------------------------- /src/memento/solution/EditorState.kt: -------------------------------------------------------------------------------- 1 | package solution 2 | 3 | data class EditorState(private val content: String) { //Memento 4 | 5 | fun getContent() = content 6 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/problem/Button.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/problem/Button.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/memento/problem/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/memento/problem/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/problwm/Chart.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/problwm/Chart.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/problem/ToolType.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/problem/ToolType.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/Canvas.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/Canvas.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/problem/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/problem/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/problem/IPost.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/problem/IPost.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/IPost.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/IPost.class -------------------------------------------------------------------------------- /src/visitor/problem/LivePost.kt: -------------------------------------------------------------------------------- 1 | package visitor.problem 2 | 3 | class LivePost : IPost { 4 | override fun publish() { 5 | println("publish LivePost") 6 | } 7 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/Button.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/Button.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ICommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ICommand.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex2/TvOn.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex2/TvOn.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/interpretter/Expression.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/interpretter/Expression.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/iterator/problem/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/iterator/problem/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/iterator/solution/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/iterator/solution/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/problem/Button.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/problem/Button.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/problem/ListBox.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/problem/ListBox.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/problem/TextBox.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/problem/TextBox.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/solution/Button.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/solution/Button.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/solution/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/solution/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/solution/ListBox.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/solution/ListBox.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/solution/TextBox.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/solution/TextBox.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/memento/solution/Client1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/memento/solution/Client1.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/memento/solution/Client2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/memento/solution/Client2.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/solution/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/solution/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/solution/Filter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/solution/Filter.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/problem/EventPost.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/problem/EventPost.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/problem/LivePost.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/problem/LivePost.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/NewsPost.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/NewsPost.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/Visitor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/Visitor.class -------------------------------------------------------------------------------- /src/visitor/problem/EventPost.kt: -------------------------------------------------------------------------------- 1 | package visitor.problem 2 | 3 | class EventPost : IPost { 4 | override fun publish() { 5 | println("publish EventPost") 6 | } 7 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex1/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex1/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex2/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex2/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex2/TvDown.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex2/TvDown.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/problem/UiControl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/problem/UiControl.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/solution/DialogBox.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/solution/DialogBox.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/solution/UiControl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/solution/UiControl.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/problwm/DataSource.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/problwm/DataSource.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/new/Chart.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/new/Chart.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/StreamPost.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/StreamPost.class -------------------------------------------------------------------------------- /src/command/solution/Button.kt: -------------------------------------------------------------------------------- 1 | package command.solution 2 | 3 | 4 | class Button(private val ICommand: ICommand) { 5 | 6 | fun click(){ 7 | ICommand.execute() 8 | } 9 | } -------------------------------------------------------------------------------- /src/command/solution/ex1/CustomerService.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex1 2 | 3 | class CustomerService { 4 | 5 | fun addCustomer(){ 6 | println("Add Customer") 7 | } 8 | } -------------------------------------------------------------------------------- /src/iterator/solution/base/Iterator.kt: -------------------------------------------------------------------------------- 1 | package iterator.solution.base 2 | 3 | interface Iterator { 4 | fun hasNext() : Boolean 5 | fun current() : T 6 | fun next() 7 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/editor/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/editor/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex2/TvRemote.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex2/TvRemote.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/interpretter/InterpreterClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/interpretter/InterpreterClient.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/problwm/SpreadSheet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/problwm/SpreadSheet.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/new/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/new/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/new/Observer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/new/Observer.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/old/Client$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/old/Client$1.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/old/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/old/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/old/Observer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/old/Observer.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/problem/ImageStorage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/problem/ImageStorage.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/solution/Compresser.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/solution/Compresser.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/solution/ImageStorage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/solution/ImageStorage.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/problem/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/problem/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/problem/Creep.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/problem/Creep.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/solution/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/solution/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/problem/PostsManager.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/problem/PostsManager.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/GeneralPost.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/GeneralPost.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/PostsManager.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/PostsManager.class -------------------------------------------------------------------------------- /src/observer/solution/old/Observer.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.old 2 | 3 | import observer.problwm.DataSource 4 | 5 | interface Observer { 6 | fun onChanged(dataSource: DataSource) 7 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/editor/History.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/editor/History.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex1/AddCustomer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex1/AddCustomer.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/interpretter/IntToHexExpression.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/interpretter/IntToHexExpression.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/interpretter/InterpreterContext.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/interpretter/InterpreterContext.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/iterator/problem/BrowserHistory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/iterator/problem/BrowserHistory.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/iterator/solution/BrowseHistory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/iterator/solution/BrowseHistory.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/iterator/solution/base/Iterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/iterator/solution/base/Iterator.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/Data.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/Data.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/new/DataSource.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/new/DataSource.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/states/BrushTool.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/states/BrushTool.class -------------------------------------------------------------------------------- /src/visitor/soltuion/GeneralPost.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | class GeneralPost : IPost { 4 | 5 | override fun execute(visitor: Visitor) { 6 | visitor.apply(this) 7 | } 8 | } -------------------------------------------------------------------------------- /src/visitor/soltuion/NewsPost.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | class NewsPost : IPost { 4 | 5 | override fun execute(visitor: Visitor) { 6 | visitor.apply(this) 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /src/visitor/soltuion/StreamPost.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | class StreamPost : IPost { 4 | 5 | override fun execute(visitor: Visitor) { 6 | visitor.apply(this) 7 | } 8 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/HttpRequest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/HttpRequest.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/editor/BoldCommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/editor/BoldCommand.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/interpretter/IntToBinaryExpression.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/interpretter/IntToBinaryExpression.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/iterator/solution/base/ListIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/iterator/solution/base/ListIterator.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/mediator/solution/ArticlesDialogBox.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/mediator/solution/ArticlesDialogBox.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/CLient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/CLient.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/Observer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/Observer.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/Person.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/Person.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/new/SpreadSheet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/new/SpreadSheet.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/problem/Canvas$WhenMappings.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/problem/Canvas$WhenMappings.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/states/SelectionTool.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/states/SelectionTool.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/problem/ItalianCreep.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/problem/ItalianCreep.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/solution/types/Creep.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/solution/types/Creep.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/ArchiveOperation.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/ArchiveOperation.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/visitor/soltuion/PublishOperation.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/visitor/soltuion/PublishOperation.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/editor/HTMLDocument.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/editor/HTMLDocument.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/editor/base/ICommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/editor/base/ICommand.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex1/CustomerService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex1/CustomerService.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex2/base/Television.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex2/base/Television.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex3_photoshop/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex3_photoshop/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/iterator/solution/base/ArrayIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/iterator/solution/base/ArrayIterator.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/DaysAttend.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/DaysAttend.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/IObserver.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/IObserver.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/Observable.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/Observable.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/ex_real_scenario/Mail.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/ex_real_scenario/Mail.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/problem/BrazalianCreep.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/problem/BrazalianCreep.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/solution/SandWishMaker.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/solution/SandWishMaker.class -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/problem/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/problem/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/problem/Logger.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/problem/Logger.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/editor/base/UndoCommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/editor/base/UndoCommand.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex2/TvRemote$Companion.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex2/TvRemote$Companion.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/AbstractModel.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/AbstractModel.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/TotalDegree.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/TotalDegree.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/old/DataSourceObserver.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/old/DataSourceObserver.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/ex_real_scenario/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/ex_real_scenario/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/solution/filters/ContractFilter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/solution/filters/ContractFilter.class -------------------------------------------------------------------------------- /src/command/solution/ex2/base/ElectronicService.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex2.base 2 | 3 | interface ElectronicService { 4 | fun on() 5 | fun off() 6 | fun volumeUp() 7 | fun volumeDown() 8 | } -------------------------------------------------------------------------------- /src/observer/problwm/Chart.kt: -------------------------------------------------------------------------------- 1 | package observer.problwm 2 | 3 | class Chart() { 4 | 5 | fun communicate(dataSource: DataSource) { 6 | println("communicate ${dataSource.getValue()}") 7 | } 8 | } -------------------------------------------------------------------------------- /src/observer/problwm/SpreadSheet.kt: -------------------------------------------------------------------------------- 1 | package observer.problwm 2 | 3 | class SpreadSheet() { 4 | 5 | fun expose( dataSource: DataSource){ 6 | println("expose ${dataSource.getValue()}") 7 | } 8 | } -------------------------------------------------------------------------------- /src/observer/solution/new/Chart.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.new 2 | 3 | 4 | class Chart : Observer { 5 | 6 | override fun onChanged(value: String) { 7 | println("Chart ${value}") 8 | } 9 | } -------------------------------------------------------------------------------- /src/visitor/soltuion/Visitor.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | interface Visitor { 4 | fun apply(newsPost: NewsPost) 5 | fun apply(general: GeneralPost) 6 | fun apply(streamPost: StreamPost) 7 | } -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/problem/Compressor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/problem/Compressor.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/Webserver.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/Webserver.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Logger.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Logger.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/observer/solution/gof_book/IObserverSource.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/observer/solution/gof_book/IObserverSource.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/solution/filters/BlackWhiteFilter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/solution/filters/BlackWhiteFilter.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/solution/types/ItalianCreep.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/solution/types/ItalianCreep.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/problem/Authenticator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/problem/Authenticator.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Handler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Handler.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/WebServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/WebServer.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/Client.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/Client.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/Logger.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/Logger.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/editor/base/UndoableICommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/editor/base/UndoableICommand.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex2/base/ElectronicService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex2/base/ElectronicService.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex3_photoshop/RedEyesCommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex3_photoshop/RedEyesCommand.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/solution/compressors/JPEGCompressor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/solution/compressors/JPEGCompressor.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/strategy/solution/compressors/PNGCompressor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/strategy/solution/compressors/PNGCompressor.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/templatemethod/solution/types/BrazilianCreep.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/templatemethod/solution/types/BrazilianCreep.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Compressor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Compressor.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Encryption.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Encryption.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex3_photoshop/BlackWhiteImage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex3_photoshop/BlackWhiteImage.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex3_photoshop/CompositeCommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex3_photoshop/CompositeCommand.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/ex_real_scenario/base/MailState.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/ex_real_scenario/base/MailState.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/ex_real_scenario/base/MailStateC.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/ex_real_scenario/base/MailStateC.class -------------------------------------------------------------------------------- /src/observer/solution/new/SpreadSheet.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.new 2 | 3 | 4 | class SpreadSheet : Observer { 5 | 6 | override fun onChanged(value: String) { 7 | println("SpreadSheet $value") 8 | } 9 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Authenticator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/ex/Authenticator.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/Compressor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/Compressor.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/TaskHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/TaskHandler.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/command/solution/ex3_photoshop/ResizeImageCommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/command/solution/ex3_photoshop/ResizeImageCommand.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/ex_real_scenario/base/OrderedState.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/ex_real_scenario/base/OrderedState.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/ex_real_scenario/base/ReceivedState.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/ex_real_scenario/base/ReceivedState.class -------------------------------------------------------------------------------- /src/chainofResponsipilities/HttpRequest.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities 2 | 3 | class HttpRequest( 4 | private val userName: String, 5 | private val password: String 6 | ) { 7 | 8 | fun getUsername() = userName 9 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/Webserver.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | interface Webserver { 6 | fun handle(request: HttpRequest) : Boolean 7 | } -------------------------------------------------------------------------------- /out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/Authenticator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/ChainOfResponsipilities/solution/my_ex/Authenticator.class -------------------------------------------------------------------------------- /out/production/Behaioral DPs/state/solution/ex_real_scenario/base/DeliveredState.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTawfiqM/Behavioral-DPs/HEAD/out/production/Behaioral DPs/state/solution/ex_real_scenario/base/DeliveredState.class -------------------------------------------------------------------------------- /src/chainofResponsipilities/problem/Logger.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.problem 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | class Logger(private val request: HttpRequest) { 6 | 7 | fun log() = print("log ${request.getUsername()}") 8 | } -------------------------------------------------------------------------------- /src/strategy/solution/ImageStorage.kt: -------------------------------------------------------------------------------- 1 | package strategy.solution 2 | 3 | class ImageStorage { 4 | 5 | fun store(fileName: String, compressor: Compresser, filter: Filter) { 6 | compressor.compress(fileName) 7 | filter.apply(fileName) 8 | } 9 | } -------------------------------------------------------------------------------- /src/mediator/problem/TextBox.kt: -------------------------------------------------------------------------------- 1 | package mediator.problem 2 | 3 | class TextBox : UiControl() { 4 | 5 | private var value: String = "" 6 | 7 | fun getValue() = value 8 | fun setValue(value: String) { 9 | this.value = value 10 | } 11 | } -------------------------------------------------------------------------------- /src/observer/problwm/DataSource.kt: -------------------------------------------------------------------------------- 1 | package observer.problwm 2 | 3 | class DataSource { 4 | private var value: String = "Default" 5 | 6 | fun setValue(value: String) { 7 | this.value = value 8 | } 9 | 10 | fun getValue() = value 11 | } -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /../../../../../:\Progression\Java\Behaioral DPs\.idea/dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /src/command/solution/ex3_photoshop/RedEyesCommand.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex3_photoshop 2 | 3 | import command.solution.ICommand 4 | 5 | class RedEyesCommand : ICommand { 6 | 7 | override fun execute() { 8 | println("RedEyes Command") 9 | } 10 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/problem/Compressor.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.problem 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | class Compressor(private val request: HttpRequest) { 6 | 7 | fun compress() = print("compress ${request.getUsername()}") 8 | } -------------------------------------------------------------------------------- /src/command/solution/ex3_photoshop/BlackWhiteImage.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex3_photoshop 2 | 3 | import command.solution.ICommand 4 | 5 | class BlackWhiteImage : ICommand { 6 | 7 | override fun execute() { 8 | println("BlackWhite Image Command") 9 | } 10 | } -------------------------------------------------------------------------------- /src/command/solution/ex3_photoshop/ResizeImageCommand.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex3_photoshop 2 | 3 | import command.solution.ICommand 4 | 5 | class ResizeImageCommand : ICommand { 6 | 7 | override fun execute() { 8 | println("ResizeImage Command") 9 | } 10 | } -------------------------------------------------------------------------------- /src/interpretter/IntToBinaryExpression.kt: -------------------------------------------------------------------------------- 1 | package interpretter 2 | 3 | class IntToBinaryExpression(val value: Int) : Expression { 4 | 5 | override fun interpret(interpreterContext: InterpreterContext) : String { 6 | return interpreterContext.getBinaryFormat(value)!! 7 | } 8 | } -------------------------------------------------------------------------------- /src/interpretter/IntToHexExpression.kt: -------------------------------------------------------------------------------- 1 | package interpretter 2 | 3 | class IntToHexExpression(val value: Int) : Expression { 4 | 5 | override fun interpret(interpreterContext: InterpreterContext) : String{ 6 | return interpreterContext.getHexadecimalFormat(value)!! 7 | } 8 | } -------------------------------------------------------------------------------- /src/command/solution/ex1/AddCustomer.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex1 2 | 3 | import command.solution.ICommand 4 | 5 | class AddCustomer(private val customerService: CustomerService) : ICommand { 6 | 7 | override fun execute() { 8 | customerService.addCustomer() 9 | } 10 | } -------------------------------------------------------------------------------- /src/strategy/solution/filters/ContractFilter.kt: -------------------------------------------------------------------------------- 1 | package strategy.solution.filters 2 | 3 | import strategy.solution.Filter 4 | 5 | class ContractFilter : Filter { 6 | 7 | override fun apply(fileName: String) { 8 | println("Filter $fileName with ContractFilter") 9 | } 10 | } -------------------------------------------------------------------------------- /src/strategy/solution/filters/BlackWhiteFilter.kt: -------------------------------------------------------------------------------- 1 | package strategy.solution.filters 2 | 3 | import strategy.solution.Filter 4 | 5 | class BlackWhiteFilter : Filter { 6 | 7 | override fun apply(fileName: String) { 8 | println("Filter $fileName with BlackWhiteFilter") 9 | } 10 | } -------------------------------------------------------------------------------- /src/templatemethod/solution/Client.java: -------------------------------------------------------------------------------- 1 | package templatemethod.solution; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | 7 | SandWishMaker sandWishMaker = new SandWishMaker(); 8 | sandWishMaker.makeSandwich(); 9 | 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/strategy/solution/compressors/JPEGCompressor.kt: -------------------------------------------------------------------------------- 1 | package strategy.solution.compressors 2 | 3 | import strategy.solution.Compresser 4 | 5 | class JPEGCompressor : Compresser { 6 | 7 | override fun compress(fileName: String) { 8 | println("compress $fileName with JPEG") 9 | } 10 | } -------------------------------------------------------------------------------- /src/strategy/solution/compressors/PNGCompressor.kt: -------------------------------------------------------------------------------- 1 | package strategy.solution.compressors 2 | 3 | import strategy.solution.Compresser 4 | 5 | class PNGCompressor : Compresser { 6 | 7 | override fun compress(fileName: String) { 8 | println("compress $fileName with PNG") 9 | } 10 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/ex/WebServer.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | class WebServer(private val handler: Handler) { 6 | 7 | fun handle(request: HttpRequest) { 8 | handler.handle(request) 9 | } 10 | } -------------------------------------------------------------------------------- /src/mediator/solution/Client.java: -------------------------------------------------------------------------------- 1 | package mediator.solution; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | 7 | ArticlesDialogBox articlesDialogBox = new ArticlesDialogBox(); 8 | articlesDialogBox.simulateUserInteraction(); 9 | 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/visitor/problem/PostsManager.kt: -------------------------------------------------------------------------------- 1 | package visitor.problem 2 | 3 | class PostsManager { 4 | private val posts = ArrayList() 5 | 6 | fun addPost(post: IPost) = posts.add(post) 7 | 8 | fun publish() { 9 | posts.forEach { 10 | it.publish() 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/interpretter/InterpreterContext.kt: -------------------------------------------------------------------------------- 1 | package interpretter 2 | 3 | class InterpreterContext { 4 | 5 | fun getBinaryFormat(i: Int): String? { 6 | return Integer.toBinaryString(i) 7 | } 8 | 9 | fun getHexadecimalFormat(i: Int): String? { 10 | return Integer.toHexString(i) 11 | } 12 | } -------------------------------------------------------------------------------- /src/mediator/solution/TextBox.kt: -------------------------------------------------------------------------------- 1 | package mediator.solution 2 | 3 | class TextBox(owner: DialogBox) : UiControl(owner) { 4 | 5 | private var value: String = "" 6 | 7 | fun getValue() = value 8 | fun setValue(value: String) { 9 | this.value = value 10 | owner.changed(this) 11 | } 12 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/problem/Authenticator.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.problem 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | class Authenticator(private val request: HttpRequest) { 6 | 7 | fun authenticate(): Boolean { 8 | return request.getUsername() == "AtDev" 9 | } 10 | } -------------------------------------------------------------------------------- /src/mediator/problem/Button.kt: -------------------------------------------------------------------------------- 1 | package mediator.problem 2 | 3 | import jdk.jfr.Enabled 4 | 5 | class Button : UiControl() { 6 | 7 | private var isEnabled: Boolean = true 8 | 9 | fun isEnabled() = isEnabled 10 | fun setIsEnabled(isEnabled: Boolean) { 11 | this.isEnabled = isEnabled 12 | } 13 | } -------------------------------------------------------------------------------- /src/state/solution/states/BrushTool.kt: -------------------------------------------------------------------------------- 1 | package state.solution.states 2 | 3 | import state.solution.Tool 4 | 5 | class BrushTool : Tool { 6 | override fun moveUp() { 7 | println("BrushTool moveUp") 8 | } 9 | 10 | override fun moveDown() { 11 | println("BrushTool moveDown") 12 | } 13 | } -------------------------------------------------------------------------------- /src/command/solution/ex2/TvOn.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex2 2 | 3 | import command.solution.ICommand 4 | import command.solution.ex2.base.ElectronicService 5 | 6 | class TvOn(private val television: ElectronicService) : ICommand { 7 | 8 | override fun execute() { 9 | television.volumeDown() 10 | } 11 | } -------------------------------------------------------------------------------- /src/observer/solution/gof_book/DaysAttend.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.gof_book 2 | 3 | 4 | //todo best practice inject data Source object here rather than Data parameter 5 | class DaysAttend : IObserver { 6 | 7 | override fun onChanged(data: Data) { 8 | println("notified DaysAttend $data") 9 | } 10 | } -------------------------------------------------------------------------------- /src/state/solution/Canvas.kt: -------------------------------------------------------------------------------- 1 | package state.solution 2 | 3 | class Canvas { 4 | lateinit var tool: Tool 5 | 6 | fun setCurrentTool(tool: Tool) { 7 | this.tool = tool 8 | } 9 | 10 | fun getCurrentTool() = tool 11 | 12 | fun moveUp() = tool.moveUp() 13 | fun moveDown() = tool.moveDown() 14 | } -------------------------------------------------------------------------------- /src/observer/solution/gof_book/TotalDegree.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.gof_book 2 | 3 | 4 | //todo best practice inject data Source object here rather than Data parameter 5 | class TotalDegree : IObserver { 6 | 7 | override fun onChanged(data: Data) { 8 | println("notified TotalDegree $data") 9 | } 10 | } -------------------------------------------------------------------------------- /src/command/solution/editor/base/UndoCommand.kt: -------------------------------------------------------------------------------- 1 | package command.solution.editor.base 2 | 3 | import command.solution.editor.History 4 | 5 | class UndoCommand(private val history: History) : ICommand { 6 | 7 | override fun execute() { 8 | if (history.size() > 0) 9 | history.pop().unExecute() 10 | } 11 | } -------------------------------------------------------------------------------- /src/state/solution/states/SelectionTool.kt: -------------------------------------------------------------------------------- 1 | package state.solution.states 2 | 3 | import state.solution.Tool 4 | 5 | class SelectionTool : Tool { 6 | override fun moveUp() { 7 | println("SelectionTool moveUp") 8 | } 9 | 10 | override fun moveDown() { 11 | println("SelectionTool moveDown") 12 | } 13 | } -------------------------------------------------------------------------------- /src/command/solution/ex2/TvDown.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex2 2 | 3 | import command.solution.ICommand 4 | import command.solution.ex2.base.ElectronicService 5 | 6 | class TvDown(private val electronicService: ElectronicService) : ICommand { 7 | 8 | override fun execute() { 9 | electronicService.volumeUp() 10 | } 11 | } -------------------------------------------------------------------------------- /src/mediator/solution/ListBox.kt: -------------------------------------------------------------------------------- 1 | package mediator.solution 2 | 3 | class ListBox(owner: DialogBox) : UiControl(owner) { 4 | 5 | private var selection: String = "" 6 | fun getSelection() = selection 7 | 8 | fun setSelected(selection: String){ 9 | this.selection=selection 10 | owner.changed(this) 11 | } 12 | } -------------------------------------------------------------------------------- /src/command/solution/ex2/TvRemote.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex2 2 | 3 | import command.solution.ex2.base.ElectronicService 4 | import command.solution.ex2.base.Television 5 | 6 | class TvRemote { 7 | 8 | companion object { 9 | fun getDevice(): ElectronicService { 10 | return Television() 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/mediator/solution/Button.kt: -------------------------------------------------------------------------------- 1 | package mediator.solution 2 | 3 | class Button(owner: DialogBox) : UiControl(owner) { 4 | 5 | private var isEnabled: Boolean = true 6 | 7 | fun isEnabled() = isEnabled 8 | 9 | fun setIsEnabled(isEnabled: Boolean) { 10 | this.isEnabled = isEnabled 11 | //owner.changed(this) 12 | } 13 | } -------------------------------------------------------------------------------- /src/observer/solution/gof_book/AbstractModel.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.gof_book 2 | 3 | import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType 4 | 5 | 6 | abstract class AbstractModel { 7 | abstract fun attach(observer: IObserver) 8 | abstract fun detach(observer: IObserver) 9 | abstract fun notifyObs(maionData: Data) 10 | } -------------------------------------------------------------------------------- /src/visitor/soltuion/PostsManager.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | 4 | class PostsManager { 5 | 6 | private val posts = ArrayList() 7 | 8 | fun addPost(post: IPost) = posts.add(post) 9 | 10 | fun execute(visitor: Visitor) { 11 | posts.forEach { 12 | it.execute(visitor) 13 | } 14 | } 15 | 16 | 17 | } -------------------------------------------------------------------------------- /src/command/solution/editor/HTMLDocument.kt: -------------------------------------------------------------------------------- 1 | package command.solution.editor 2 | 3 | class HTMLDocument { 4 | 5 | private var content = "" 6 | 7 | fun makeBold() { 8 | content = " $content " 9 | } 10 | 11 | fun setContent(content: String) { 12 | this.content = content 13 | } 14 | 15 | fun getContent() = content 16 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/ex/Logger.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | class Logger(next: Handler?) : Handler(next) { 6 | 7 | override fun doHandle(request: HttpRequest): Boolean { 8 | println("Logger : ${request.getUsername()}") 9 | return false 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /src/observer/solution/old/DataSourceObserver.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.old 2 | 3 | import observer.problwm.DataSource 4 | 5 | class DataSourceObserver(private val dataSource: DataSource, private val observer: Observer) { 6 | 7 | fun setData(value: String) { 8 | dataSource.setValue(value) 9 | observer.onChanged(dataSource) 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /src/templatemethod/problem/ItalianCreep.kt: -------------------------------------------------------------------------------- 1 | package templatemethod.problem 2 | 3 | class ItalianCreep { 4 | 5 | private val creep = Creep() 6 | 7 | fun makeSandwich() { 8 | creep.makeSandwich( 9 | isAddMeat = true, isAddCheese = true, isAddVegetables = false, isAddCondiments = true, 10 | "Italian" 11 | ) 12 | } 13 | } -------------------------------------------------------------------------------- /src/templatemethod/problem/BrazalianCreep.kt: -------------------------------------------------------------------------------- 1 | package templatemethod.problem 2 | 3 | class BrazalianCreep { 4 | 5 | private val creep = Creep() 6 | 7 | fun makeSandwich() { 8 | creep.makeSandwich( 9 | isAddMeat = false, isAddCheese = false, isAddVegetables = false, isAddCondiments = true, 10 | "Brazlian" 11 | ) 12 | } 13 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/ex/Compressor.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | class Compressor(next: Handler?) : Handler(next) { 6 | 7 | override fun doHandle(request: HttpRequest): Boolean { 8 | println("Compressor : ${request.getUsername()}") 9 | return false 10 | } 11 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/ex/Encryption.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | class Encryption(next: Handler?) : Handler(next) { 6 | 7 | override fun doHandle(request: HttpRequest): Boolean { 8 | println("Encryption : ${request.getUsername()}") 9 | return false 10 | } 11 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/ex/Authenticator.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | class Authenticator(next: Handler?) : Handler(next) { 6 | 7 | override fun doHandle(request: HttpRequest): Boolean { 8 | println("Authenticator : ${request.getUsername()}") 9 | return false 10 | } 11 | } -------------------------------------------------------------------------------- /src/mediator/problem/ListBox.kt: -------------------------------------------------------------------------------- 1 | package mediator.problem 2 | 3 | //todo not reusable //need for every one component 4 | class ListBox : UiControl() { 5 | private var selection: String = "" 6 | get() { 7 | if (field.isNullOrBlank()) field = "" 8 | return field 9 | } 10 | set(value) { 11 | field = value 12 | } 13 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/my_ex/Logger.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.my_ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | import chainofResponsipilities.solution.Webserver 5 | 6 | class Logger : Webserver { 7 | 8 | override fun handle(request: HttpRequest): Boolean { 9 | println("log ${request.getUsername()}") 10 | return true 11 | } 12 | } -------------------------------------------------------------------------------- /src/command/solution/editor/History.kt: -------------------------------------------------------------------------------- 1 | package command.solution.editor 2 | 3 | import command.solution.editor.base.UndoableICommand 4 | 5 | class History { 6 | private val commands = ArrayDeque() 7 | 8 | fun pop() = commands.last() 9 | fun push(command: UndoableICommand) { 10 | commands.add(command) 11 | } 12 | 13 | fun size() = commands.size 14 | } -------------------------------------------------------------------------------- /src/command/solution/ex3_photoshop/CompositeCommand.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex3_photoshop 2 | 3 | import command.solution.ICommand 4 | 5 | class CompositeCommand : ICommand { 6 | 7 | private val commands = ArrayList() 8 | fun addCommand(iCommand: ICommand) = commands.add(iCommand) 9 | 10 | override fun execute() { 11 | commands.forEach { it.execute() } 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/my_ex/Compressor.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.my_ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | import chainofResponsipilities.solution.Webserver 5 | 6 | class Compressor : Webserver { 7 | 8 | override fun handle(request: HttpRequest): Boolean { 9 | 10 | println("compress ${request.getUsername()}") 11 | return true 12 | } 13 | } -------------------------------------------------------------------------------- /src/visitor/soltuion/PublishOperation.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | class PublishOperation :Visitor { 4 | 5 | override fun apply(newsPost: NewsPost) { 6 | println("apply NewsPost") 7 | } 8 | 9 | override fun apply(general: GeneralPost) { 10 | println("apply GeneralPost") 11 | } 12 | 13 | override fun apply(streamPost: StreamPost) { 14 | println("apply StreamPost") 15 | } 16 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/ex/Handler.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | abstract class Handler(val next: Handler?) { 6 | 7 | protected abstract fun doHandle(request: HttpRequest): Boolean 8 | 9 | fun handle(request: HttpRequest) { 10 | if (doHandle(request)) 11 | return 12 | 13 | next?.handle(request) 14 | } 15 | } -------------------------------------------------------------------------------- /src/observer/solution/gof_book/Person.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.gof_book 2 | 3 | import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType 4 | 5 | class Person : Observable(){ 6 | 7 | lateinit var mainData: Data 8 | 9 | fun setData(mainData: Data) { 10 | this.mainData = mainData 11 | notifyObs(mainData) 12 | } 13 | 14 | } 15 | 16 | data class Data(val id: String, val name: String, val address: String) -------------------------------------------------------------------------------- /src/visitor/soltuion/ArchiveOperation.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | class ArchiveOperation : Visitor { 4 | 5 | override fun apply(newsPost: NewsPost) { 6 | println("archive NewsPost") 7 | } 8 | 9 | override fun apply(general: GeneralPost) { 10 | println("archive GeneralPost") 11 | } 12 | 13 | override fun apply(streamPost: StreamPost) { 14 | println("archive StreamPost") 15 | } 16 | } -------------------------------------------------------------------------------- /src/memento/solution/Editor.kt: -------------------------------------------------------------------------------- 1 | package solution 2 | 3 | class Editor { //Originator 4 | private var content = "" 5 | 6 | fun setContent(content: String) { 7 | this.content = content 8 | } 9 | fun getContent() = content 10 | 11 | fun createState(): EditorState { 12 | return EditorState(content) 13 | } 14 | 15 | fun restore(state: EditorState) { 16 | content = state.getContent() 17 | } 18 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/my_ex/Authenticator.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.my_ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | import chainofResponsipilities.solution.Webserver 5 | 6 | class Authenticator : Webserver { 7 | 8 | override fun handle(request: HttpRequest) : Boolean{ 9 | val isSuccess = request.getUsername() == "AtDev" 10 | println("isSuccess ${isSuccess}") 11 | return isSuccess 12 | } 13 | } -------------------------------------------------------------------------------- /src/state/solution/ex_real_scenario/base/MailState.kt: -------------------------------------------------------------------------------- 1 | package state.solution.ex_real_scenario.base 2 | 3 | import state.solution.ex_real_scenario.Mail 4 | 5 | interface MailState { 6 | fun next(mail: Mail) 7 | fun previous(mail: Mail) 8 | fun print() 9 | } 10 | 11 | abstract class MailStateC { //more Clean 12 | abstract fun next(mail: Mail) 13 | abstract fun previous(mail: Mail) 14 | fun print(msg: String) { 15 | println(msg) 16 | } 17 | } -------------------------------------------------------------------------------- /src/observer/solution/gof_book/Observer.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.gof_book 2 | 3 | import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType 4 | 5 | interface Observer { 6 | fun onChanged(data: Data) 7 | } 8 | 9 | interface IObserver{ 10 | fun onChanged(data: T) 11 | } 12 | 13 | //more flexible Style //todo dont pass a a specific type -> just inject datasource Object in Concrete Classes and just notify 14 | interface IObserverSource{ 15 | fun onChanged() 16 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/my_ex/TaskHandler.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.my_ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | import chainofResponsipilities.solution.Webserver 5 | 6 | class TaskHandler { 7 | private val tasks = ArrayList() 8 | 9 | fun addTask(task: Webserver){ 10 | tasks.add(task) 11 | } 12 | 13 | fun execute(request: HttpRequest){ 14 | tasks.forEach { it.handle(request) } 15 | } 16 | } -------------------------------------------------------------------------------- /src/state/solution/ex_real_scenario/Mail.kt: -------------------------------------------------------------------------------- 1 | package state.solution.ex_real_scenario 2 | 3 | import state.solution.ex_real_scenario.base.MailState 4 | 5 | class Mail { 6 | private lateinit var mailState: MailState 7 | 8 | fun setState(mailState: MailState) { 9 | this.mailState = mailState 10 | } 11 | 12 | fun next() { 13 | mailState.next(this) 14 | } 15 | 16 | fun prev() = mailState.previous(this) 17 | fun print() = mailState.print() 18 | } -------------------------------------------------------------------------------- /src/command/solution/ex1/Client.java: -------------------------------------------------------------------------------- 1 | package command.solution.ex1; 2 | 3 | import command.solution.Button; 4 | import command.solution.ICommand; 5 | 6 | public class Client { 7 | 8 | public static void main(String[] args) { 9 | 10 | CustomerService customerService = new CustomerService(); 11 | ICommand addCustomerCommand = new AddCustomer(customerService); 12 | Button button = new Button(addCustomerCommand); 13 | button.click(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/command/solution/ex3_photoshop/Client.java: -------------------------------------------------------------------------------- 1 | package command.solution.ex3_photoshop; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | 7 | CompositeCommand compositeCommand = new CompositeCommand(); 8 | 9 | compositeCommand.addCommand(new ResizeImageCommand()); 10 | compositeCommand.addCommand(new BlackWhiteImage()); 11 | compositeCommand.addCommand(new RedEyesCommand()); 12 | 13 | compositeCommand.execute(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/state/solution/ex_real_scenario/base/DeliveredState.kt: -------------------------------------------------------------------------------- 1 | package state.solution.ex_real_scenario.base 2 | 3 | import state.solution.ex_real_scenario.Mail 4 | 5 | class DeliveredState : MailState { 6 | 7 | override fun next(mail: Mail) { 8 | mail.setState(ReceivedState()) 9 | } 10 | 11 | override fun previous(mail: Mail) { 12 | mail.setState(OrderedState()) 13 | } 14 | 15 | override fun print() { 16 | println("Package delivered to post office, not received yet.") 17 | } 18 | } -------------------------------------------------------------------------------- /src/state/solution/ex_real_scenario/base/OrderedState.kt: -------------------------------------------------------------------------------- 1 | package state.solution.ex_real_scenario.base 2 | 3 | import state.solution.ex_real_scenario.Mail 4 | 5 | class OrderedState : MailState { 6 | 7 | override fun next(mail: Mail) { 8 | mail.setState(DeliveredState()) 9 | } 10 | 11 | override fun previous(mail: Mail) { 12 | println("The package is in its root state.") 13 | } 14 | 15 | override fun print() { 16 | println("Package ordered, not delivered to the office yet.") 17 | } 18 | } -------------------------------------------------------------------------------- /src/state/solution/ex_real_scenario/base/ReceivedState.kt: -------------------------------------------------------------------------------- 1 | package state.solution.ex_real_scenario.base 2 | 3 | import state.solution.ex_real_scenario.Mail 4 | 5 | class ReceivedState : MailState { 6 | 7 | override fun next(mail: Mail) { 8 | println("This package is already received by a client.") 9 | } 10 | 11 | override fun previous(mail: Mail) { 12 | mail.setState(DeliveredState()) 13 | } 14 | 15 | override fun print() { 16 | println("This package is already received by a client.") 17 | } 18 | } -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/my_ex/Client.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.my_ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | object Client { 6 | 7 | @JvmStatic 8 | fun main(args: Array){ 9 | 10 | val request = HttpRequest("Atdev","asas") 11 | 12 | //todo pipeline of tasks 13 | val task = TaskHandler() 14 | task.addTask(Authenticator()) 15 | task.addTask(Logger()) 16 | task.addTask(Compressor()) 17 | 18 | task.execute(request) 19 | } 20 | } -------------------------------------------------------------------------------- /src/iterator/solution/base/ListIterator.kt: -------------------------------------------------------------------------------- 1 | package iterator.solution.base 2 | 3 | import iterator.solution.BrowseHistory 4 | 5 | class ListIterator(private val browseHistory: BrowseHistory) : Iterator { 6 | 7 | private var position = 0 8 | 9 | override fun hasNext(): Boolean { 10 | return position < browseHistory.getUrls().size 11 | } 12 | 13 | override fun next() { 14 | position++ 15 | } 16 | 17 | override fun current(): String { 18 | return browseHistory.getUrls()[position] 19 | } 20 | } -------------------------------------------------------------------------------- /Behaioral DPs.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/iterator/solution/base/ArrayIterator.kt: -------------------------------------------------------------------------------- 1 | package iterator.solution.base 2 | 3 | import iterator.solution.BrowseHistory 4 | 5 | class ArrayIterator(private val browseHistory: BrowseHistory) : Iterator { 6 | 7 | private var position = 0 8 | 9 | override fun next() { 10 | position++ 11 | } 12 | 13 | override fun current(): String { 14 | return browseHistory.getUrls()[position] 15 | } 16 | 17 | override fun hasNext(): Boolean { 18 | return position < browseHistory.getUrls().size 19 | } 20 | } -------------------------------------------------------------------------------- /src/command/solution/editor/BoldCommand.kt: -------------------------------------------------------------------------------- 1 | package command.solution.editor 2 | 3 | import command.solution.editor.base.UndoableICommand 4 | 5 | class BoldCommand(private val history: History, private val htmlDocument: HTMLDocument) : UndoableICommand { 6 | 7 | private var prevContent = "" 8 | 9 | override fun unExecute() { 10 | htmlDocument.setContent(prevContent) 11 | } 12 | 13 | override fun execute() { 14 | prevContent = htmlDocument.getContent() 15 | htmlDocument.makeBold() 16 | history.push(this) 17 | } 18 | } -------------------------------------------------------------------------------- /src/command/solution/ex2/base/Television.kt: -------------------------------------------------------------------------------- 1 | package command.solution.ex2.base 2 | 3 | class Television : ElectronicService { 4 | 5 | var volume = 0 6 | 7 | override fun on() { 8 | println("Television on") 9 | } 10 | 11 | override fun off() { 12 | println("Television off") 13 | } 14 | 15 | override fun volumeUp() { 16 | volume++ 17 | println("Television volumeUp $volume") 18 | } 19 | 20 | override fun volumeDown() { 21 | --volume 22 | println("Television volumeDown $volume") 23 | } 24 | } -------------------------------------------------------------------------------- /src/observer/solution/gof_book/Observable.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.gof_book 2 | 3 | 4 | open class Observable : AbstractModel() { //Subject in gof book 5 | 6 | private val observers = ArrayList>() 7 | 8 | override fun attach(observer: IObserver) { 9 | observers.add(observer) 10 | } 11 | 12 | override fun detach(observer: IObserver) { 13 | observers.remove(observer) 14 | } 15 | 16 | override fun notifyObs(maionData: Data) { 17 | observers.forEach { it.onChanged(maionData) } 18 | } 19 | } -------------------------------------------------------------------------------- /src/iterator/problem/Client.java: -------------------------------------------------------------------------------- 1 | package iterator.problem; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | 7 | BrowserHistory browserHistory = new BrowserHistory(); 8 | browserHistory.push("a"); 9 | browserHistory.push("b"); 10 | browserHistory.push("c"); 11 | browserHistory.push("d"); 12 | 13 | browserHistory.pop(); 14 | 15 | for(int i=0;i) { 11 | 12 | val person = Person() 13 | 14 | val daysAttend = DaysAttend() 15 | val totalDegree = TotalDegree() 16 | 17 | person.attach(daysAttend) 18 | person.attach(totalDegree) 19 | 20 | person.setData(Data("342234","Sayed","Amerika")) 21 | } 22 | } -------------------------------------------------------------------------------- /src/command/problem/Button.kt: -------------------------------------------------------------------------------- 1 | package command.problem 2 | 3 | class Button { 4 | 5 | //todo -> So now the click method depends on Type and evertime u must change this class 6 | //if another logic added, u has to add more implementations and complexity 7 | //violate OCP , not flexible to increase 8 | 9 | fun click(type: String) { 10 | when (type) { 11 | "Add Customer" -> println("Add Customer") 12 | "delete Customer" -> println("delete Customer") 13 | "Update Customer" -> println("Update Customer") 14 | } 15 | 16 | } 17 | } -------------------------------------------------------------------------------- /src/state/solution/Client.java: -------------------------------------------------------------------------------- 1 | package state.solution; 2 | 3 | import state.solution.states.BrushTool; 4 | import state.solution.states.SelectionTool; 5 | 6 | public class Client { 7 | 8 | public static void main(String[] args) { 9 | Canvas canvas = new Canvas(); 10 | canvas.setCurrentTool(new BrushTool()); 11 | 12 | canvas.moveUp(); 13 | canvas.moveDown(); 14 | } 15 | 16 | 17 | //problem -> The State pattern is closely related to the concept of a Finite-State Machine. (if - Switch) Complexity 18 | 19 | //https://refactoring.guru/design-patterns/state 20 | } 21 | -------------------------------------------------------------------------------- /src/observer/solution/new/DataSource.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.new 2 | 3 | class DataSource { 4 | 5 | private var value = "" 6 | private val observers = ArrayList() 7 | 8 | fun setValue(value: String) { 9 | this.value = value 10 | notifyChanged() 11 | } 12 | 13 | private fun notifyChanged() { 14 | observers.forEach { it.onChanged(value) } 15 | } 16 | 17 | fun getValue() = value 18 | 19 | fun addObserver(observer: Observer) { 20 | observers.add(observer) 21 | } 22 | 23 | fun removeObserver(observer: Observer) = observers.remove(observer) 24 | } 25 | -------------------------------------------------------------------------------- /src/strategy/solution/Client.java: -------------------------------------------------------------------------------- 1 | package strategy.solution; 2 | 3 | import strategy.solution.compressors.JPEGCompressor; 4 | import strategy.solution.compressors.PNGCompressor; 5 | import strategy.solution.filters.BlackWhiteFilter; 6 | import strategy.solution.filters.ContractFilter; 7 | 8 | public class Client { 9 | 10 | public static void main(String[] args) { 11 | 12 | ImageStorage imageStorage = new ImageStorage(); 13 | 14 | imageStorage.store("AtFile.png", new PNGCompressor(), new ContractFilter()); 15 | imageStorage.store("AtFile.Jpeg", new JPEGCompressor(), new BlackWhiteFilter()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/memento/problem/Client.java: -------------------------------------------------------------------------------- 1 | package memento.problem; 2 | 3 | import problem.Editor; 4 | 5 | public class Client { 6 | 7 | public static void main(String[] args) { 8 | Editor editor = new Editor(); //Goal (Undo Mechanism Feature) 9 | editor.setContent("a"); 10 | editor.setContent("b"); 11 | editor.setContent("c"); 12 | 13 | System.out.println(editor.getContent()); 14 | 15 | editor.undo(); 16 | System.out.println(editor.getContent()); 17 | 18 | editor.undo(); 19 | System.out.println(editor.getContent()); 20 | 21 | editor.undo(); 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/iterator/problem/BrowserHistory.kt: -------------------------------------------------------------------------------- 1 | package iterator.problem 2 | 3 | class BrowserHistory { 4 | 5 | private val urls = ArrayList() 6 | //todo Problem 7 | //if u change the Stock to another Type // Like This 8 | //private val urls = arrayOf(String()) 9 | //todo then u have to change all Classes use this a Composition and too change this CLass 10 | 11 | fun push(url: String) { 12 | urls.add(url) 13 | } 14 | 15 | fun pop(): String { 16 | val lastItem = urls[urls.size - 1] 17 | urls.remove(lastItem) 18 | 19 | return lastItem 20 | } 21 | 22 | fun getUrls() = urls 23 | } -------------------------------------------------------------------------------- /src/state/solution/ex_real_scenario/Client.java: -------------------------------------------------------------------------------- 1 | package state.solution.ex_real_scenario; 2 | 3 | import state.solution.ex_real_scenario.base.OrderedState; 4 | 5 | public class Client { 6 | 7 | public static void main(String[] args) { 8 | 9 | Mail mail = new Mail(); 10 | mail.setState(new OrderedState()); 11 | 12 | mail.print(); 13 | 14 | mail.next(); 15 | mail.print(); 16 | 17 | mail.next(); 18 | mail.print(); 19 | 20 | mail.prev(); 21 | mail.print(); 22 | } 23 | 24 | //https://www.baeldung.com/java-state-design-pattern 25 | //https://refactoring.guru/design-patterns/state 26 | } 27 | -------------------------------------------------------------------------------- /.idea/libraries/KotlinJavaRuntime.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/chainofResponsipilities/solution/ex/Client.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.solution.ex 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | 6 | object Client { 7 | 8 | @JvmStatic 9 | fun main(args: Array) { 10 | 11 | val request = HttpRequest("Atdev","43423432") 12 | 13 | //Encryption 14 | val encryption =Encryption(null) 15 | //(Pipeline) = authenticator -> Compressor - Logger 16 | val logger = Logger(encryption) 17 | val compressor = Compressor(logger) 18 | val authenticator = Authenticator(compressor) 19 | 20 | val server = WebServer(authenticator) 21 | server.handle(request) 22 | } 23 | } -------------------------------------------------------------------------------- /src/command/solution/ex2/Client.java: -------------------------------------------------------------------------------- 1 | package command.solution.ex2; 2 | 3 | import command.solution.Button; 4 | import command.solution.ex2.base.ElectronicService; 5 | 6 | public class Client { 7 | 8 | public static void main(String[] args) { 9 | 10 | ElectronicService tv = TvRemote.Companion.getDevice(); 11 | 12 | TvOn tvOn = new TvOn(tv); 13 | TvDown tvDown = new TvDown(tv); 14 | Button button = new Button(tvOn); 15 | 16 | button.click(); 17 | 18 | button = new Button(tvDown); 19 | button.click(); 20 | } 21 | 22 | //https://www.youtube.com/watch?v=7Pj5kAhVBlg 23 | //https://refactoring.guru/design-patterns/command 24 | } 25 | -------------------------------------------------------------------------------- /src/chainofResponsipilities/problem/Client.kt: -------------------------------------------------------------------------------- 1 | package chainofResponsipilities.problem 2 | 3 | import chainofResponsipilities.HttpRequest 4 | 5 | object Client { 6 | 7 | @JvmStatic 8 | fun main(args: Array) { 9 | 10 | //todo the problem here is Client is Tightly coupled on all classes here (new) and the if constructors changed the clients will affect 11 | val request = HttpRequest("Tawfiq", "12122") 12 | 13 | val authentication = Authenticator(request) 14 | val compressor = Compressor(request) 15 | val logger = Logger(request) 16 | 17 | authentication.authenticate() 18 | compressor.compress() 19 | logger.log() 20 | } 21 | } -------------------------------------------------------------------------------- /src/visitor/problem/Client.kt: -------------------------------------------------------------------------------- 1 | package visitor.problem 2 | 3 | object Client { 4 | 5 | @JvmStatic 6 | fun main(args: Array) { 7 | val postsManager = PostsManager() 8 | postsManager.addPost(EventPost()) 9 | postsManager.addPost(LivePost()) 10 | 11 | postsManager.publish() 12 | //todo problem here if u want to add new Functionality to 'IPost' u have to go implement in all Posts 13 | //todo 2- every time u add new Functionality , u have to mofify 'PostsManager' and that violate Open Closed Principle 14 | 15 | //Visitor is a behavioral design pattern that lets you separate algorithms from the objects on which they operate. 16 | } 17 | } -------------------------------------------------------------------------------- /src/templatemethod/problem/Client.java: -------------------------------------------------------------------------------- 1 | package templatemethod.problem; 2 | 3 | public class Client { 4 | 5 | //Two different components have significant similarities, but demonstrate no reuse of common interface or implementation. 6 | // If a change common to both components becomes necessary, duplicate effort must be expended. 7 | 8 | //2 problems - Duplication - Finite state Machine (Conditional) 9 | 10 | public static void main(String[] args) { 11 | 12 | ItalianCreep italianCreep = new ItalianCreep(); 13 | italianCreep.makeSandwich(); 14 | 15 | BrazalianCreep brazalianCreep = new BrazalianCreep(); 16 | brazalianCreep.makeSandwich(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/interpretter/InterpreterClient.kt: -------------------------------------------------------------------------------- 1 | package interpretter 2 | 3 | class InterpreterClient(private val interpreterContext: InterpreterContext) { 4 | 5 | fun interpret(str: String): String { 6 | var exp: Expression? = null 7 | //create rules for expressions 8 | exp = when { 9 | str.contains("Hexadecimal") -> { 10 | IntToHexExpression(str.substring(0, str.indexOf(" ")).toInt()) 11 | } 12 | str.contains("Binary") -> { 13 | IntToBinaryExpression(str.substring(0, str.indexOf(" ")).toInt()) 14 | } 15 | else -> return str 16 | } 17 | 18 | return exp.interpret(interpreterContext) 19 | } 20 | } -------------------------------------------------------------------------------- /src/observer/solution/new/Client.kt: -------------------------------------------------------------------------------- 1 | package observer.solution.new 2 | 3 | object Client { 4 | 5 | @JvmStatic 6 | fun main(args: Array) { 7 | 8 | val chart = Chart() 9 | val spreadSheet = SpreadSheet() 10 | 11 | // val dataSource = DataSource(object : Observer { 12 | // override fun onChanged(value: String) { 13 | // chart.onChanged(value) 14 | // spreadSheet.onChanged(value) 15 | // } 16 | // }) 17 | 18 | val dataSource = DataSource() 19 | dataSource.addObserver(chart) 20 | dataSource.addObserver(spreadSheet) 21 | 22 | dataSource.setValue("October Line") 23 | dataSource.setValue("Pyramids") 24 | 25 | } 26 | } -------------------------------------------------------------------------------- /src/strategy/problem/ImageStorage.kt: -------------------------------------------------------------------------------- 1 | package strategy.problem 2 | 3 | class ImageStorage( 4 | private var compresser: String = "", 5 | private var filter: String = "" 6 | ) { 7 | 8 | fun store() { 9 | when (compresser) { 10 | "PNG" -> println("compress PNG") 11 | "JPEG" -> println("compress JPEG") 12 | "JPG" -> println("compress JPG") 13 | } 14 | 15 | when (filter) { 16 | "B&W" -> println("filter B&W") 17 | "Contract" -> println("filter Contract") 18 | } 19 | } 20 | 21 | //todo the problem here is Violate Solid ,, OOP 22 | //todo, So difficult to increase types (imagine on Complexity) , Duplication , no flexibility 23 | //todo not maintainable 24 | 25 | } -------------------------------------------------------------------------------- /src/iterator/solution/BrowseHistory.kt: -------------------------------------------------------------------------------- 1 | package iterator.solution 2 | 3 | import iterator.solution.base.ArrayIterator 4 | 5 | class BrowseHistory { 6 | 7 | //todo now u can change this class without the other dependencies affect 8 | // .. browseHistory is tightly coupled to ArrayIterator not to the 'urls' type > so no any problem 9 | private val urls = ArrayList() 10 | //private val urls = Array(5) { "it = $it" } 11 | 12 | fun createIterator() = ArrayIterator(this) 13 | 14 | fun push(url: String) { 15 | urls.add(url) 16 | } 17 | 18 | fun pop(): String { 19 | val lastItem = urls[urls.size - 1] 20 | urls.remove(lastItem) 21 | 22 | return lastItem 23 | } 24 | 25 | fun getUrls() = urls 26 | } -------------------------------------------------------------------------------- /src/interpretter/Client.kt: -------------------------------------------------------------------------------- 1 | package interpretter 2 | 3 | object Client { 4 | 5 | @JvmStatic 6 | fun main(args: Array) { 7 | //interpret input to show as a custom output 8 | //like convert Xml to GUI , JSON to Some Words Language 9 | val interpreterClient = InterpreterClient(InterpreterContext()) 10 | 11 | val str1 = "28 in Binary"; 12 | val str2 = "28 in Hexadecimal"; 13 | println(interpreterClient.interpret(str1)) 14 | println(interpreterClient.interpret(str2)) 15 | } 16 | 17 | //https://www.journaldev.com/1635/interpreter-design-pattern-java#:~:text=The%20best%20example%20of%20interpreter,output%20interpreted%20in%20another%20language. 18 | //https://sourcemaking.com/design_patterns/interpreter 19 | } -------------------------------------------------------------------------------- /src/visitor/soltuion/Client.kt: -------------------------------------------------------------------------------- 1 | package visitor.soltuion 2 | 3 | object Client { 4 | 5 | @JvmStatic 6 | fun main(args: Array) { 7 | 8 | val manager = PostsManager() 9 | manager.addPost(NewsPost()) 10 | manager.addPost(GeneralPost()) 11 | //Now u can add new type 12 | manager.addPost(StreamPost()) 13 | 14 | manager.execute(PublishOperation()) 15 | //now can add Algorithm without affect other algorithms 16 | //Visitor is a behavioral design pattern that lets you separate algorithms from the objects on which they operate. 17 | //open for Extension Closed for modification In Action 18 | println("..............Archive Operation....................") 19 | manager.execute(ArchiveOperation()) 20 | } 21 | } -------------------------------------------------------------------------------- /src/memento/solution/History.kt: -------------------------------------------------------------------------------- 1 | package solution 2 | 3 | class History { //Caretaker 4 | private val states = ArrayList() 5 | private var currentStatePos = -1 6 | 7 | fun push(state: EditorState) { 8 | states.add(state) 9 | currentStatePos++ 10 | } 11 | 12 | fun pop(): EditorState { //undo 13 | val lastPos = states.size - 1 14 | val lastItem = states[lastPos] 15 | states.remove(lastItem) 16 | 17 | return lastItem 18 | } 19 | 20 | fun undo(): EditorState { 21 | currentStatePos-- 22 | return state() 23 | } 24 | 25 | fun redo(): EditorState { 26 | currentStatePos++ 27 | return state() 28 | } 29 | 30 | private fun state() = states[currentStatePos] //todo need Validation on States of List 31 | 32 | } -------------------------------------------------------------------------------- /src/iterator/solution/Client.java: -------------------------------------------------------------------------------- 1 | package iterator.solution; 2 | 3 | import iterator.solution.base.Iterator; 4 | 5 | public class Client { 6 | 7 | public static void main(String[] args) { 8 | 9 | BrowseHistory browseHistory = new BrowseHistory(); 10 | browseHistory.push("a"); 11 | browseHistory.push("b"); 12 | browseHistory.push("c"); 13 | browseHistory.push("d"); 14 | 15 | browseHistory.pop(); 16 | 17 | //todo Client is tightly coupled to iterater (abstraction) not details 18 | Iterator iterator = browseHistory.createIterator(); 19 | while (iterator.hasNext()) { 20 | System.out.println(iterator.current()); 21 | iterator.next(); 22 | } 23 | } 24 | 25 | //https://refactoring.guru/design-patterns/iterator/java/example 26 | } 27 | -------------------------------------------------------------------------------- /src/templatemethod/solution/types/Creep.kt: -------------------------------------------------------------------------------- 1 | package templatemethod.solution.types 2 | 3 | abstract class Creep { 4 | 5 | fun makeSandwich() { 6 | 7 | cutBun() 8 | 9 | if (isAddMeat()) 10 | addMeat() 11 | if (isAddCheese()) 12 | addCheese() 13 | if (isAddVegetables()) 14 | addVegetables() 15 | if (isAddCondiments()) 16 | addCondiments() 17 | 18 | wrapTheSandwich() 19 | } 20 | 21 | abstract fun isAddCondiments(): Boolean 22 | abstract fun isAddVegetables(): Boolean 23 | abstract fun isAddCheese(): Boolean 24 | abstract fun isAddMeat(): Boolean 25 | 26 | abstract fun wrapTheSandwich() 27 | abstract fun addCondiments() 28 | abstract fun addVegetables() 29 | abstract fun addCheese() 30 | abstract fun addMeat() 31 | abstract fun cutBun() 32 | } -------------------------------------------------------------------------------- /src/observer/solution/old/Client.java: -------------------------------------------------------------------------------- 1 | package observer.solution.old; 2 | 3 | import observer.problwm.Chart; 4 | import observer.problwm.DataSource; 5 | import observer.problwm.SpreadSheet; 6 | 7 | public class Client { 8 | 9 | public static void main(String[] args) { 10 | 11 | DataSource dataSource = new DataSource(); 12 | Chart chart = new Chart(); 13 | SpreadSheet spreadSheet = new SpreadSheet(); 14 | 15 | System.out.println(dataSource.getValue()); 16 | 17 | DataSourceObserver observer = new DataSourceObserver(dataSource, new Observer() { 18 | @Override 19 | public void onChanged(DataSource dataSource) { 20 | chart.communicate(dataSource); 21 | spreadSheet.expose(dataSource); 22 | } 23 | }); 24 | 25 | observer.setData("12 Persons"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/memento/solution/Client2.java: -------------------------------------------------------------------------------- 1 | package memento.solution; 2 | 3 | import solution.Editor; 4 | import solution.History; 5 | 6 | public class Client2 { 7 | 8 | //Originator Editor 9 | //Memento EditorState 10 | //CareTaker History 11 | public static void main(String[] args) { 12 | Editor editor =new Editor(); 13 | History history = new History(); 14 | 15 | editor.setContent("a"); 16 | history.push(editor.createState()); 17 | 18 | editor.setContent("b"); 19 | history.push(editor.createState()); 20 | 21 | editor.setContent("c"); 22 | history.push(editor.createState()); 23 | 24 | editor.restore(history.undo()); 25 | System.out.println(editor.getContent()); 26 | 27 | editor.restore(history.redo()); 28 | System.out.println(editor.getContent()); 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/command/solution/editor/Client.java: -------------------------------------------------------------------------------- 1 | package command.solution.editor; 2 | 3 | import command.solution.editor.base.UndoCommand; 4 | 5 | public class Client { 6 | 7 | public static void main(String[] args) { 8 | 9 | HTMLDocument document = new HTMLDocument(); 10 | document.setContent("Test Bold"); 11 | 12 | History history = new History(); 13 | 14 | BoldCommand boldCommand = new BoldCommand(history, document); 15 | boldCommand.execute(); 16 | System.out.println(document.getContent()); 17 | 18 | //todo u can use 'unExecute' Directly but for Maintainable Code seperate Undo Mechanism Command 19 | //boldCommand.unExecute(); 20 | // System.out.println(document.getContent()); 21 | 22 | //todo seperate like this 23 | UndoCommand undoCommand = new UndoCommand(history); 24 | undoCommand.execute(); 25 | System.out.println(document.getContent()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/memento/solution/Client1.java: -------------------------------------------------------------------------------- 1 | package memento.solution; 2 | 3 | import solution.Editor; 4 | import solution.History; 5 | 6 | public class Client1 { 7 | 8 | //Originator Editor 9 | //Memento EditorState 10 | //CareTaker History 11 | public static void main(String[] args) { 12 | 13 | Editor editor = new Editor(); 14 | History history = new History(); 15 | 16 | editor.setContent("a"); 17 | history.push(editor.createState()); 18 | 19 | editor.setContent("b"); 20 | history.push(editor.createState()); 21 | 22 | editor.setContent("c"); 23 | 24 | editor.restore(history.pop()); //undo 25 | editor.restore(history.pop()); //undo 26 | 27 | System.out.println(editor.getContent()); 28 | 29 | } 30 | 31 | //todo 32 | //examples: 33 | //https://www.tutorialspoint.com/design_pattern/memento_pattern.htm 34 | //solution 35 | //https://refactoring.guru/design-patterns/memento 36 | } 37 | -------------------------------------------------------------------------------- /src/templatemethod/solution/types/BrazilianCreep.kt: -------------------------------------------------------------------------------- 1 | package templatemethod.solution.types 2 | 3 | class BrazilianCreep : Creep() { 4 | 5 | override fun wrapTheSandwich() { 6 | println("wrapTheSandwich") 7 | } 8 | 9 | override fun addCondiments() { 10 | println("addCondiments") 11 | } 12 | 13 | override fun addVegetables() { 14 | println("addVegetables") 15 | } 16 | 17 | override fun addCheese() { 18 | println("addCheese") 19 | } 20 | 21 | override fun addMeat() { 22 | println("addMeat") 23 | } 24 | 25 | override fun cutBun() { 26 | println("cutBun") 27 | } 28 | 29 | override fun isAddCondiments(): Boolean { 30 | return false 31 | } 32 | 33 | override fun isAddVegetables(): Boolean { 34 | return true 35 | } 36 | 37 | override fun isAddCheese(): Boolean { 38 | return true 39 | } 40 | 41 | override fun isAddMeat(): Boolean { 42 | return false 43 | } 44 | } -------------------------------------------------------------------------------- /src/templatemethod/solution/types/ItalianCreep.kt: -------------------------------------------------------------------------------- 1 | package templatemethod.solution.types 2 | 3 | class ItalianCreep : Creep() { 4 | 5 | override fun wrapTheSandwich() { 6 | println("wrapTheSandwich") 7 | } 8 | 9 | override fun addCondiments() { 10 | println("addCondiments") 11 | } 12 | 13 | override fun addVegetables() { 14 | println("addVegetables") 15 | } 16 | 17 | override fun addCheese() { 18 | println("addCheese") 19 | } 20 | 21 | override fun addMeat() { 22 | println("addMeat") 23 | } 24 | 25 | override fun cutBun() { 26 | println("cutBun") 27 | } 28 | 29 | override fun isAddCondiments(): Boolean { 30 | return true 31 | } 32 | 33 | override fun isAddVegetables(): Boolean { 34 | return true 35 | } 36 | 37 | override fun isAddCheese(): Boolean { 38 | return true 39 | } 40 | 41 | override fun isAddMeat(): Boolean { 42 | return true 43 | } 44 | 45 | } -------------------------------------------------------------------------------- /src/state/problem/Canvas.kt: -------------------------------------------------------------------------------- 1 | package state.problem 2 | 3 | class Canvas { 4 | 5 | private lateinit var currentTool: ToolType 6 | 7 | fun moveDown() { 8 | when(currentTool){ 9 | ToolType.SELECTION -> println("Selection Icon") 10 | ToolType.BRUSH -> println("Brush Icon") 11 | ToolType.ERASER -> println("Eraser Icon") 12 | else -> throw ExceptionInInitializerError("Not Fount Type Tool") 13 | } 14 | } 15 | 16 | fun moveUp() { 17 | when(currentTool){ 18 | ToolType.SELECTION -> println("Draw Dashed Rectangle") 19 | ToolType.BRUSH -> println("Draw a Line") 20 | ToolType.ERASER -> println("Erase SomeThing") 21 | else -> throw ExceptionInInitializerError("Not Fount Type Tool") 22 | } 23 | } 24 | //problem 25 | //in real Scenria World ..we has hundred of Types like Keyboard Keys 26 | // - So difficult for Maintainable , Extensible 27 | // - Violate Solid and OOP 28 | } -------------------------------------------------------------------------------- /src/mediator/solution/ArticlesDialogBox.kt: -------------------------------------------------------------------------------- 1 | package mediator.solution 2 | 3 | class ArticlesDialogBox : DialogBox() { 4 | 5 | var btnSave = Button(this) 6 | var listBox = ListBox(this) 7 | var textBox = TextBox(this) 8 | 9 | fun simulateUserInteraction() { 10 | listBox.setSelected("Article 1") 11 | textBox.setValue("") 12 | listBox.setSelected("Article 2") 13 | println("btnSave: ${btnSave.isEnabled()} , textbox: ${textBox.getValue()}") 14 | } 15 | 16 | override fun changed(uiControl: UiControl) { 17 | if (uiControl == listBox) 18 | articlesSelection() 19 | else if (uiControl == textBox) 20 | textBoxChanged() 21 | } 22 | 23 | private fun textBoxChanged() { 24 | val isEmpty = textBox.getValue().isNullOrEmpty() 25 | btnSave.setIsEnabled(!isEmpty) 26 | } 27 | 28 | private fun articlesSelection() { 29 | textBox.setValue(listBox.getSelection()) 30 | btnSave.setIsEnabled(true) 31 | } 32 | } -------------------------------------------------------------------------------- /src/memento/problem/Editor.kt: -------------------------------------------------------------------------------- 1 | package problem 2 | 3 | class Editor { 4 | 5 | //Violate SRP (Solid) 6 | //Violate OOP (Encapsoluation) 7 | //this class must represent and create Only (Can Seperate Too) 8 | //Think after Complexity 9 | 10 | private var content = "" 11 | 12 | //solution 1 13 | private var lastContentValue = content 14 | 15 | //another Solution 2 16 | private var lastPosition = 1 17 | private val prevContents = ArrayList() 18 | 19 | fun setContent(content: String) { 20 | //this.lastContentValue = this.content 21 | //solution 2 22 | prevContents.add(content) 23 | lastPosition = prevContents.size - 1 24 | // 25 | this.content = content 26 | } 27 | 28 | fun getContent() = content 29 | 30 | fun undo() { 31 | // this.content = lastContentValue 32 | // 33 | if (lastPosition != 0) { 34 | this.content = prevContents[lastPosition - 1] 35 | lastPosition -= 1 36 | } else 37 | println("this is Last Edit Process") 38 | } 39 | 40 | //todo (Problems) 41 | //now the problem is when u has more property like content , size , style : u must has Prev Lists of every single one 42 | //More Code .. Duplication .. Not Clean .. Violate solid principles 43 | 44 | } -------------------------------------------------------------------------------- /src/templatemethod/solution/SandWishMaker.kt: -------------------------------------------------------------------------------- 1 | package templatemethod.solution 2 | 3 | import templatemethod.solution.types.BrazilianCreep 4 | import templatemethod.solution.types.Creep 5 | import templatemethod.solution.types.ItalianCreep 6 | 7 | class SandWishMaker { 8 | //todo 'Factory' 'SandWishMaker' based on (type) 9 | private lateinit var creep: Creep 10 | 11 | //todo 'Solved' same (Template and Invocation and skeleton) but different Implementation 12 | fun makeSandwich() { 13 | println(".......ItalianCreep............................") 14 | val customer1 = ItalianCreep() 15 | customer1.makeSandwich() 16 | 17 | println(".......BrazilianCreep..........................") 18 | val customer2 = BrazilianCreep() 19 | customer2.makeSandwich() 20 | } 21 | //Template method design pattern is to define an algorithm as a skeleton of operations 22 | // and leave the details to be implemented by the child classes. 23 | // The overall structure and sequence of the algorithm is preserved by the parent class 24 | //........................................... 25 | //https://www.youtube.com/watch?v=aR1B8MlwbRI 26 | //https://refactoring.guru/design-patterns/template-method 27 | //https://www.geeksforgeeks.org/template-method-design-pattern/ 28 | //https://www.tutorialspoint.com/design_pattern/template_pattern.htm 29 | 30 | } -------------------------------------------------------------------------------- /src/templatemethod/problem/Creep.kt: -------------------------------------------------------------------------------- 1 | package templatemethod.problem 2 | 3 | class Creep { 4 | 5 | var type = "" 6 | 7 | //hooks 8 | fun makeSandwich(isAddMeat: Boolean, isAddCheese: Boolean, isAddVegetables: Boolean, isAddCondiments: Boolean,type: String) { 9 | 10 | cutBun() 11 | if (isAddMeat) 12 | addMeat() 13 | if (isAddCheese) 14 | addCheese() 15 | if (isAddVegetables) 16 | addVegetables() 17 | if (isAddCondiments) 18 | addCondiments() 19 | 20 | if(type=="Brazlian") 21 | customBrazlian() 22 | else if(type=="Italian") 23 | customItalian() 24 | 25 | wrapTheSandwich() 26 | } 27 | 28 | private fun customItalian() { 29 | println("customItalian") 30 | } 31 | 32 | private fun customBrazlian() { 33 | println("customBrazlian") 34 | } 35 | 36 | private fun wrapTheSandwich() { 37 | println("wrapTheSandwich") 38 | } 39 | 40 | private fun addCondiments() { 41 | println("addCondiments") 42 | } 43 | 44 | private fun addVegetables() { 45 | println("addVegetables") 46 | } 47 | 48 | private fun addCheese() { 49 | println("addCheese") 50 | } 51 | 52 | private fun addMeat() { 53 | println("addMeat") 54 | } 55 | 56 | private fun cutBun() { 57 | println("cutBun") 58 | } 59 | } --------------------------------------------------------------------------------