├── .gitignore ├── README.md ├── abstract-types ├── pom.xml └── src │ └── main │ └── scala │ └── com │ └── ivan │ └── nikolov │ ├── abstract_types │ ├── AbstractTypesExamples.scala │ ├── GenericsExamples.scala │ ├── Person.scala │ └── Printer.scala │ ├── polymorphism │ ├── AdhocPolymorphismExample.scala │ └── SubtypePolymorphismExample.scala │ └── self_types │ ├── DB.scala │ └── PersisterExample.scala ├── aop ├── pom.xml └── src │ └── main │ ├── resources │ └── users.json │ └── scala │ └── com │ └── ivan │ └── nikolov │ ├── aop │ ├── DataReader.scala │ ├── LoggingDataReader.scala │ └── model │ │ └── Person.scala │ └── components │ ├── CookingComponent.scala │ ├── RecipeComponent.scala │ ├── Robot.scala │ ├── RobotRegistry.scala │ ├── TimeComponent.scala │ ├── base │ ├── Cooker.scala │ ├── RecipeFinder.scala │ └── Time.scala │ └── model │ └── Food.scala ├── behavioral-design-patterns ├── pom.xml └── src │ └── main │ ├── resources │ ├── com │ │ └── ivan │ │ │ └── nikolov │ │ │ └── behavioral │ │ │ ├── strategy │ │ │ ├── people.csv │ │ │ └── people.json │ │ │ └── template │ │ │ ├── people.csv │ │ │ └── people.json │ └── log4j.properties │ └── scala │ └── com │ └── ivan │ └── nikolov │ └── behavioral │ ├── chain_of_responsibility │ ├── ATM.scala │ ├── Dispenser.scala │ └── Money.scala │ ├── command │ ├── Robot.scala │ └── RobotCommand.scala │ ├── interpreter │ ├── Expression.scala │ └── RPNParser.scala │ ├── iterator │ └── Student.scala │ ├── mediator │ └── Student.scala │ ├── memento │ ├── Memento.scala │ └── TextEditor.scala │ ├── null_object │ ├── DataGenerator.scala │ └── Message.scala │ ├── observer │ ├── Observer.scala │ └── Post.scala │ ├── state │ ├── State.scala │ └── model │ │ └── MediaPlayer.scala │ ├── strategy │ ├── Parser.scala │ ├── ParsingStrategy.scala │ └── model │ │ └── Person.scala │ ├── template │ ├── DataFinder.scala │ └── model │ │ └── Person.scala │ ├── value_object │ └── Date.scala │ └── visitor │ ├── Element.scala │ ├── Visitor.scala │ └── better │ ├── Element.scala │ └── Visitor.scala ├── creational-design-patterns ├── pom.xml └── src │ └── main │ ├── resources │ └── com │ │ └── ivan │ │ └── nikolov │ │ └── creational │ │ └── lazy_init │ │ └── pi.properties │ └── scala │ └── com │ └── ivan │ └── nikolov │ └── creational │ ├── builder │ ├── case_classes │ │ └── Person.scala │ ├── java_way │ │ └── Person.scala │ └── type_safe │ │ ├── Person.scala │ │ └── case_require │ │ └── Person.scala │ ├── factories │ ├── SimpleConnection.scala │ ├── abstract_factory │ │ ├── DatabaseClient.scala │ │ ├── DatabaseConnectorFactory.scala │ │ └── Example.scala │ ├── factory_method │ │ ├── BadDatabaseClient.scala │ │ ├── BadExample.scala │ │ ├── DatabaseClient.scala │ │ ├── Example.scala │ │ └── SimpleConnectionPrinter.scala │ └── simple │ │ └── Animal.scala │ ├── lazy_init │ └── CircleUtils.scala │ ├── prototype │ └── Cell.scala │ └── singleton │ ├── AppRegistry.scala │ └── StringUtils.scala ├── deep-theory ├── input.txt ├── output.txt ├── pom.xml └── src │ └── main │ └── scala │ └── com │ └── ivan │ └── nikolov │ ├── functors │ ├── Functor.scala │ ├── FunctorsExample.scala │ └── package.scala │ ├── monads │ ├── ListWrapper.scala │ ├── Monad.scala │ ├── Option.scala │ └── io │ │ ├── State.scala │ │ └── package.scala │ └── monoids │ ├── Monoid.scala │ ├── MonoidFolding.scala │ └── package.scala ├── functional-design-patterns ├── pom.xml └── src │ └── main │ └── scala │ └── com │ └── ivan │ └── nikolov │ ├── cake │ ├── Application.scala │ ├── ApplicationComponentRegistry.scala │ ├── DaoComponent.scala │ ├── DatabaseComponent.scala │ ├── MigrationComponent.scala │ ├── UserComponent.scala │ └── model │ │ ├── Class.scala │ │ └── Person.scala │ ├── duck │ ├── DuckTypingExample.scala │ ├── SentenceParserSplit.scala │ └── SentenceParserTokenize.scala │ ├── implicits │ ├── ImplicitExamples.scala │ ├── di │ │ ├── DatabaseService.scala │ │ ├── ImplicitDIExample.scala │ │ ├── UserService.scala │ │ ├── model │ │ │ └── Person.scala │ │ └── package.scala │ └── package.scala │ ├── laziness │ └── Person.scala │ ├── lens │ ├── User.scala │ └── bad │ │ └── User.scala │ ├── memo │ ├── Hasher.scala │ ├── MemoizationExample.scala │ └── Memoizer.scala │ ├── partial_functions │ ├── PartiallyAppliedFunctions.scala │ └── PartiallyDefinedFunctions.scala │ ├── pimp │ ├── PimpExample.scala │ ├── model │ │ └── Person.scala │ └── package.scala │ ├── stackable │ ├── IntQueue.scala │ └── StringWriter.scala │ └── type_classes │ ├── Number.scala │ ├── Stats.scala │ └── StatsExample.scala ├── job-scheduler ├── pom.xml └── src │ ├── main │ ├── resources │ │ ├── application.conf │ │ └── log4j.properties │ └── scala │ │ └── com │ │ └── ivan │ │ └── nikolov │ │ └── scheduler │ │ ├── Scheduler.scala │ │ ├── actors │ │ ├── ActorFactoryComponent.scala │ │ ├── Master.scala │ │ ├── Worker.scala │ │ └── messages │ │ │ └── SchedulerMessage.scala │ │ ├── config │ │ ├── app │ │ │ └── AppConfigComponent.scala │ │ └── job │ │ │ ├── JobConfig.scala │ │ │ ├── JobFrequency.scala │ │ │ ├── JobType.scala │ │ │ └── TimeOptions.scala │ │ ├── dao │ │ ├── DaoServiceComponent.scala │ │ ├── DatabaseServiceComponent.scala │ │ └── MigrationComponent.scala │ │ ├── io │ │ └── IOServiceComponent.scala │ │ ├── registry │ │ └── ComponentRegistry.scala │ │ └── services │ │ └── JobConfigReaderServiceComponent.scala │ └── test │ ├── resources │ ├── application.conf │ ├── command.json │ └── log4j.properties │ └── scala │ └── com │ └── ivan │ └── nikolov │ └── scheduler │ ├── TestEnvironment.scala │ ├── config │ └── job │ │ └── TimeOptionsTest.scala │ ├── dao │ └── DaoServiceTest.scala │ └── services │ └── JobConfigReaderServiceTest.scala ├── pom.xml ├── real-life-applications ├── pom.xml └── src │ ├── main │ └── scala │ │ └── com │ │ └── ivan │ │ └── nikolov │ │ ├── monads │ │ ├── IOMonadExample.scala │ │ ├── model │ │ │ └── Person.scala │ │ └── package.scala │ │ └── monoids │ │ ├── MonoidsExample.scala │ │ └── package.scala │ └── test │ └── scala │ └── com │ └── ivan │ └── nikolov │ └── monoids │ └── MonoidsTest.scala ├── structural-design-patterns ├── pom.xml └── src │ └── main │ ├── resources │ ├── com │ │ └── ivan │ │ │ └── nikolov │ │ │ └── structural │ │ │ ├── decorator │ │ │ └── data.txt │ │ │ └── proxy │ │ │ ├── file1.txt │ │ │ ├── file2.txt │ │ │ └── file3.txt │ └── log4j.properties │ └── scala │ └── com │ └── ivan │ └── nikolov │ └── structural │ ├── adapter │ ├── AppLogger.scala │ └── package.scala │ ├── bridge │ ├── Hasher.scala │ ├── PasswordConverter.scala │ ├── common │ │ └── Hasher.scala │ └── scala │ │ ├── HasherImpl.scala │ │ └── PasswordConverterBase.scala │ ├── composite │ └── Node.scala │ ├── decorator │ ├── CapitalizedInputReaderTrait.scala │ ├── InputReaderDecorator.scala │ └── common │ │ └── InputReader.scala │ ├── facade │ ├── DataDecoder.scala │ ├── DataDeserializer.scala │ ├── DataDownloader.scala │ ├── DataReader.scala │ └── model │ │ └── Person.scala │ ├── flyweight │ ├── Circle.scala │ └── Color.scala │ └── proxy │ └── FileReader.scala ├── traits ├── pom.xml └── src │ ├── main │ └── scala │ │ └── com │ │ └── ivan │ │ └── nikolov │ │ ├── basic │ │ ├── Beeper.scala │ │ ├── NotifierImpl.scala │ │ └── Ping.scala │ │ ├── common │ │ ├── Alarm.scala │ │ ├── Connector.scala │ │ └── Notifier.scala │ │ ├── composition │ │ ├── Clashing.scala │ │ ├── Greeter.scala │ │ ├── Watch.scala │ │ └── self_types │ │ │ └── AlarmNotifier.scala │ │ ├── diamond │ │ └── Diamond.scala │ │ └── linearisation │ │ ├── Animal.scala │ │ └── MultiplierIdentity.scala │ └── test │ └── scala │ └── com │ └── ivan │ └── nikolov │ ├── composition │ ├── TraitACaseScopeTest.scala │ └── TraitATest.scala │ └── linearisation │ └── DoubledMultiplierIdentityTest.scala └── unification ├── pom.xml └── src └── main └── scala └── com └── ivan └── nikolov └── unification ├── adts ├── Month.scala ├── RGB.scala └── Shape.scala ├── functions ├── FunctionLiterals.scala └── FunctionObjects.scala └── modules └── Alarm.scala /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/.gitignore -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/README.md -------------------------------------------------------------------------------- /abstract-types/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/abstract-types/pom.xml -------------------------------------------------------------------------------- /abstract-types/src/main/scala/com/ivan/nikolov/abstract_types/AbstractTypesExamples.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/abstract-types/src/main/scala/com/ivan/nikolov/abstract_types/AbstractTypesExamples.scala -------------------------------------------------------------------------------- /abstract-types/src/main/scala/com/ivan/nikolov/abstract_types/GenericsExamples.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/abstract-types/src/main/scala/com/ivan/nikolov/abstract_types/GenericsExamples.scala -------------------------------------------------------------------------------- /abstract-types/src/main/scala/com/ivan/nikolov/abstract_types/Person.scala: -------------------------------------------------------------------------------- 1 | package com.ivan.nikolov.abstract_types 2 | 3 | 4 | case class Person(name: String) 5 | -------------------------------------------------------------------------------- /abstract-types/src/main/scala/com/ivan/nikolov/abstract_types/Printer.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/abstract-types/src/main/scala/com/ivan/nikolov/abstract_types/Printer.scala -------------------------------------------------------------------------------- /abstract-types/src/main/scala/com/ivan/nikolov/polymorphism/AdhocPolymorphismExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/abstract-types/src/main/scala/com/ivan/nikolov/polymorphism/AdhocPolymorphismExample.scala -------------------------------------------------------------------------------- /abstract-types/src/main/scala/com/ivan/nikolov/polymorphism/SubtypePolymorphismExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/abstract-types/src/main/scala/com/ivan/nikolov/polymorphism/SubtypePolymorphismExample.scala -------------------------------------------------------------------------------- /abstract-types/src/main/scala/com/ivan/nikolov/self_types/DB.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/abstract-types/src/main/scala/com/ivan/nikolov/self_types/DB.scala -------------------------------------------------------------------------------- /abstract-types/src/main/scala/com/ivan/nikolov/self_types/PersisterExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/abstract-types/src/main/scala/com/ivan/nikolov/self_types/PersisterExample.scala -------------------------------------------------------------------------------- /aop/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/pom.xml -------------------------------------------------------------------------------- /aop/src/main/resources/users.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/resources/users.json -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/aop/DataReader.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/aop/DataReader.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/aop/LoggingDataReader.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/aop/LoggingDataReader.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/aop/model/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/aop/model/Person.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/CookingComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/CookingComponent.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/RecipeComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/RecipeComponent.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/Robot.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/Robot.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/RobotRegistry.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/RobotRegistry.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/TimeComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/TimeComponent.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/base/Cooker.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/base/Cooker.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/base/RecipeFinder.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/base/RecipeFinder.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/base/Time.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/base/Time.scala -------------------------------------------------------------------------------- /aop/src/main/scala/com/ivan/nikolov/components/model/Food.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/aop/src/main/scala/com/ivan/nikolov/components/model/Food.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/pom.xml -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/resources/com/ivan/nikolov/behavioral/strategy/people.csv: -------------------------------------------------------------------------------- 1 | Ivan,26,London 2 | Maria,23,Edinburgh 3 | John,36,New York 4 | Anna,24,Moscow -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/resources/com/ivan/nikolov/behavioral/strategy/people.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/resources/com/ivan/nikolov/behavioral/strategy/people.json -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/resources/com/ivan/nikolov/behavioral/template/people.csv: -------------------------------------------------------------------------------- 1 | Ivan,26,London 2 | Maria,23,Edinburgh 3 | John,36,New York 4 | Anna,24,Moscow -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/resources/com/ivan/nikolov/behavioral/template/people.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/resources/com/ivan/nikolov/behavioral/template/people.json -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/resources/log4j.properties -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/chain_of_responsibility/ATM.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/chain_of_responsibility/ATM.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/chain_of_responsibility/Dispenser.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/chain_of_responsibility/Dispenser.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/chain_of_responsibility/Money.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/chain_of_responsibility/Money.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/command/Robot.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/command/Robot.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/command/RobotCommand.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/command/RobotCommand.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/interpreter/Expression.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/interpreter/Expression.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/interpreter/RPNParser.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/interpreter/RPNParser.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/iterator/Student.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/iterator/Student.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/mediator/Student.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/mediator/Student.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/memento/Memento.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/memento/Memento.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/memento/TextEditor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/memento/TextEditor.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/null_object/DataGenerator.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/null_object/DataGenerator.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/null_object/Message.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/null_object/Message.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/observer/Observer.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/observer/Observer.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/observer/Post.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/observer/Post.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/state/State.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/state/State.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/state/model/MediaPlayer.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/state/model/MediaPlayer.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/strategy/Parser.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/strategy/Parser.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/strategy/ParsingStrategy.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/strategy/ParsingStrategy.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/strategy/model/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/strategy/model/Person.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/template/DataFinder.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/template/DataFinder.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/template/model/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/template/model/Person.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/value_object/Date.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/value_object/Date.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/visitor/Element.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/visitor/Element.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/visitor/Visitor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/visitor/Visitor.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/visitor/better/Element.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/visitor/better/Element.scala -------------------------------------------------------------------------------- /behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/visitor/better/Visitor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/behavioral-design-patterns/src/main/scala/com/ivan/nikolov/behavioral/visitor/better/Visitor.scala -------------------------------------------------------------------------------- /creational-design-patterns/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/pom.xml -------------------------------------------------------------------------------- /creational-design-patterns/src/main/resources/com/ivan/nikolov/creational/lazy_init/pi.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/resources/com/ivan/nikolov/creational/lazy_init/pi.properties -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/builder/case_classes/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/builder/case_classes/Person.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/builder/java_way/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/builder/java_way/Person.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/builder/type_safe/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/builder/type_safe/Person.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/builder/type_safe/case_require/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/builder/type_safe/case_require/Person.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/SimpleConnection.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/SimpleConnection.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/abstract_factory/DatabaseClient.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/abstract_factory/DatabaseClient.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/abstract_factory/DatabaseConnectorFactory.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/abstract_factory/DatabaseConnectorFactory.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/abstract_factory/Example.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/abstract_factory/Example.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/BadDatabaseClient.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/BadDatabaseClient.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/BadExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/BadExample.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/DatabaseClient.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/DatabaseClient.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/Example.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/Example.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/SimpleConnectionPrinter.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/factory_method/SimpleConnectionPrinter.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/simple/Animal.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/factories/simple/Animal.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/lazy_init/CircleUtils.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/lazy_init/CircleUtils.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/prototype/Cell.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/prototype/Cell.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/singleton/AppRegistry.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/singleton/AppRegistry.scala -------------------------------------------------------------------------------- /creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/singleton/StringUtils.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/creational-design-patterns/src/main/scala/com/ivan/nikolov/creational/singleton/StringUtils.scala -------------------------------------------------------------------------------- /deep-theory/input.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/input.txt -------------------------------------------------------------------------------- /deep-theory/output.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/output.txt -------------------------------------------------------------------------------- /deep-theory/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/pom.xml -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/functors/Functor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/functors/Functor.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/functors/FunctorsExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/functors/FunctorsExample.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/functors/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/functors/package.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/monads/ListWrapper.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/monads/ListWrapper.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/monads/Monad.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/monads/Monad.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/monads/Option.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/monads/Option.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/monads/io/State.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/monads/io/State.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/monads/io/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/monads/io/package.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/monoids/Monoid.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/monoids/Monoid.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/monoids/MonoidFolding.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/monoids/MonoidFolding.scala -------------------------------------------------------------------------------- /deep-theory/src/main/scala/com/ivan/nikolov/monoids/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/deep-theory/src/main/scala/com/ivan/nikolov/monoids/package.scala -------------------------------------------------------------------------------- /functional-design-patterns/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/pom.xml -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/Application.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/Application.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/ApplicationComponentRegistry.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/ApplicationComponentRegistry.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/DaoComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/DaoComponent.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/DatabaseComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/DatabaseComponent.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/MigrationComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/MigrationComponent.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/UserComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/UserComponent.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/model/Class.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/model/Class.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/model/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/cake/model/Person.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/duck/DuckTypingExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/duck/DuckTypingExample.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/duck/SentenceParserSplit.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/duck/SentenceParserSplit.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/duck/SentenceParserTokenize.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/duck/SentenceParserTokenize.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/ImplicitExamples.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/ImplicitExamples.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/DatabaseService.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/DatabaseService.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/ImplicitDIExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/ImplicitDIExample.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/UserService.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/UserService.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/model/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/model/Person.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/di/package.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/implicits/package.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/laziness/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/laziness/Person.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/lens/User.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/lens/User.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/lens/bad/User.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/lens/bad/User.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/memo/Hasher.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/memo/Hasher.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/memo/MemoizationExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/memo/MemoizationExample.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/memo/Memoizer.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/memo/Memoizer.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/partial_functions/PartiallyAppliedFunctions.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/partial_functions/PartiallyAppliedFunctions.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/partial_functions/PartiallyDefinedFunctions.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/partial_functions/PartiallyDefinedFunctions.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/pimp/PimpExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/pimp/PimpExample.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/pimp/model/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/pimp/model/Person.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/pimp/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/pimp/package.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/stackable/IntQueue.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/stackable/IntQueue.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/stackable/StringWriter.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/stackable/StringWriter.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/type_classes/Number.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/type_classes/Number.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/type_classes/Stats.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/type_classes/Stats.scala -------------------------------------------------------------------------------- /functional-design-patterns/src/main/scala/com/ivan/nikolov/type_classes/StatsExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/functional-design-patterns/src/main/scala/com/ivan/nikolov/type_classes/StatsExample.scala -------------------------------------------------------------------------------- /job-scheduler/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/pom.xml -------------------------------------------------------------------------------- /job-scheduler/src/main/resources/application.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/resources/application.conf -------------------------------------------------------------------------------- /job-scheduler/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/resources/log4j.properties -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/Scheduler.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/Scheduler.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/actors/ActorFactoryComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/actors/ActorFactoryComponent.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/actors/Master.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/actors/Master.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/actors/Worker.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/actors/Worker.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/actors/messages/SchedulerMessage.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/actors/messages/SchedulerMessage.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/app/AppConfigComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/app/AppConfigComponent.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/job/JobConfig.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/job/JobConfig.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/job/JobFrequency.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/job/JobFrequency.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/job/JobType.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/job/JobType.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/job/TimeOptions.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/config/job/TimeOptions.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/dao/DaoServiceComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/dao/DaoServiceComponent.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/dao/DatabaseServiceComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/dao/DatabaseServiceComponent.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/dao/MigrationComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/dao/MigrationComponent.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/io/IOServiceComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/io/IOServiceComponent.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/registry/ComponentRegistry.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/registry/ComponentRegistry.scala -------------------------------------------------------------------------------- /job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/services/JobConfigReaderServiceComponent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/main/scala/com/ivan/nikolov/scheduler/services/JobConfigReaderServiceComponent.scala -------------------------------------------------------------------------------- /job-scheduler/src/test/resources/application.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/test/resources/application.conf -------------------------------------------------------------------------------- /job-scheduler/src/test/resources/command.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/test/resources/command.json -------------------------------------------------------------------------------- /job-scheduler/src/test/resources/log4j.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/test/resources/log4j.properties -------------------------------------------------------------------------------- /job-scheduler/src/test/scala/com/ivan/nikolov/scheduler/TestEnvironment.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/test/scala/com/ivan/nikolov/scheduler/TestEnvironment.scala -------------------------------------------------------------------------------- /job-scheduler/src/test/scala/com/ivan/nikolov/scheduler/config/job/TimeOptionsTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/test/scala/com/ivan/nikolov/scheduler/config/job/TimeOptionsTest.scala -------------------------------------------------------------------------------- /job-scheduler/src/test/scala/com/ivan/nikolov/scheduler/dao/DaoServiceTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/test/scala/com/ivan/nikolov/scheduler/dao/DaoServiceTest.scala -------------------------------------------------------------------------------- /job-scheduler/src/test/scala/com/ivan/nikolov/scheduler/services/JobConfigReaderServiceTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/job-scheduler/src/test/scala/com/ivan/nikolov/scheduler/services/JobConfigReaderServiceTest.scala -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/pom.xml -------------------------------------------------------------------------------- /real-life-applications/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/real-life-applications/pom.xml -------------------------------------------------------------------------------- /real-life-applications/src/main/scala/com/ivan/nikolov/monads/IOMonadExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/real-life-applications/src/main/scala/com/ivan/nikolov/monads/IOMonadExample.scala -------------------------------------------------------------------------------- /real-life-applications/src/main/scala/com/ivan/nikolov/monads/model/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/real-life-applications/src/main/scala/com/ivan/nikolov/monads/model/Person.scala -------------------------------------------------------------------------------- /real-life-applications/src/main/scala/com/ivan/nikolov/monads/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/real-life-applications/src/main/scala/com/ivan/nikolov/monads/package.scala -------------------------------------------------------------------------------- /real-life-applications/src/main/scala/com/ivan/nikolov/monoids/MonoidsExample.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/real-life-applications/src/main/scala/com/ivan/nikolov/monoids/MonoidsExample.scala -------------------------------------------------------------------------------- /real-life-applications/src/main/scala/com/ivan/nikolov/monoids/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/real-life-applications/src/main/scala/com/ivan/nikolov/monoids/package.scala -------------------------------------------------------------------------------- /real-life-applications/src/test/scala/com/ivan/nikolov/monoids/MonoidsTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/real-life-applications/src/test/scala/com/ivan/nikolov/monoids/MonoidsTest.scala -------------------------------------------------------------------------------- /structural-design-patterns/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/pom.xml -------------------------------------------------------------------------------- /structural-design-patterns/src/main/resources/com/ivan/nikolov/structural/decorator/data.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/resources/com/ivan/nikolov/structural/decorator/data.txt -------------------------------------------------------------------------------- /structural-design-patterns/src/main/resources/com/ivan/nikolov/structural/proxy/file1.txt: -------------------------------------------------------------------------------- 1 | I am file 1. -------------------------------------------------------------------------------- /structural-design-patterns/src/main/resources/com/ivan/nikolov/structural/proxy/file2.txt: -------------------------------------------------------------------------------- 1 | I am file 2. -------------------------------------------------------------------------------- /structural-design-patterns/src/main/resources/com/ivan/nikolov/structural/proxy/file3.txt: -------------------------------------------------------------------------------- 1 | I am file 3. -------------------------------------------------------------------------------- /structural-design-patterns/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/resources/log4j.properties -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/adapter/AppLogger.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/adapter/AppLogger.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/adapter/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/adapter/package.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/Hasher.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/Hasher.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/PasswordConverter.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/PasswordConverter.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/common/Hasher.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/common/Hasher.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/scala/HasherImpl.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/scala/HasherImpl.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/scala/PasswordConverterBase.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/bridge/scala/PasswordConverterBase.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/composite/Node.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/composite/Node.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/decorator/CapitalizedInputReaderTrait.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/decorator/CapitalizedInputReaderTrait.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/decorator/InputReaderDecorator.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/decorator/InputReaderDecorator.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/decorator/common/InputReader.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/decorator/common/InputReader.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/DataDecoder.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/DataDecoder.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/DataDeserializer.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/DataDeserializer.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/DataDownloader.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/DataDownloader.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/DataReader.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/DataReader.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/model/Person.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/facade/model/Person.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/flyweight/Circle.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/flyweight/Circle.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/flyweight/Color.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/flyweight/Color.scala -------------------------------------------------------------------------------- /structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/proxy/FileReader.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/structural-design-patterns/src/main/scala/com/ivan/nikolov/structural/proxy/FileReader.scala -------------------------------------------------------------------------------- /traits/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/pom.xml -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/basic/Beeper.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/basic/Beeper.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/basic/NotifierImpl.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/basic/NotifierImpl.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/basic/Ping.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/basic/Ping.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/common/Alarm.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/common/Alarm.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/common/Connector.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/common/Connector.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/common/Notifier.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/common/Notifier.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/composition/Clashing.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/composition/Clashing.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/composition/Greeter.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/composition/Greeter.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/composition/Watch.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/composition/Watch.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/composition/self_types/AlarmNotifier.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/composition/self_types/AlarmNotifier.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/diamond/Diamond.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/diamond/Diamond.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/linearisation/Animal.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/linearisation/Animal.scala -------------------------------------------------------------------------------- /traits/src/main/scala/com/ivan/nikolov/linearisation/MultiplierIdentity.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/main/scala/com/ivan/nikolov/linearisation/MultiplierIdentity.scala -------------------------------------------------------------------------------- /traits/src/test/scala/com/ivan/nikolov/composition/TraitACaseScopeTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/test/scala/com/ivan/nikolov/composition/TraitACaseScopeTest.scala -------------------------------------------------------------------------------- /traits/src/test/scala/com/ivan/nikolov/composition/TraitATest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/test/scala/com/ivan/nikolov/composition/TraitATest.scala -------------------------------------------------------------------------------- /traits/src/test/scala/com/ivan/nikolov/linearisation/DoubledMultiplierIdentityTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/traits/src/test/scala/com/ivan/nikolov/linearisation/DoubledMultiplierIdentityTest.scala -------------------------------------------------------------------------------- /unification/pom.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/unification/pom.xml -------------------------------------------------------------------------------- /unification/src/main/scala/com/ivan/nikolov/unification/adts/Month.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/unification/src/main/scala/com/ivan/nikolov/unification/adts/Month.scala -------------------------------------------------------------------------------- /unification/src/main/scala/com/ivan/nikolov/unification/adts/RGB.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/unification/src/main/scala/com/ivan/nikolov/unification/adts/RGB.scala -------------------------------------------------------------------------------- /unification/src/main/scala/com/ivan/nikolov/unification/adts/Shape.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/unification/src/main/scala/com/ivan/nikolov/unification/adts/Shape.scala -------------------------------------------------------------------------------- /unification/src/main/scala/com/ivan/nikolov/unification/functions/FunctionLiterals.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/unification/src/main/scala/com/ivan/nikolov/unification/functions/FunctionLiterals.scala -------------------------------------------------------------------------------- /unification/src/main/scala/com/ivan/nikolov/unification/functions/FunctionObjects.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/unification/src/main/scala/com/ivan/nikolov/unification/functions/FunctionObjects.scala -------------------------------------------------------------------------------- /unification/src/main/scala/com/ivan/nikolov/unification/modules/Alarm.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikolovivan/scala-design-patterns/HEAD/unification/src/main/scala/com/ivan/nikolov/unification/modules/Alarm.scala --------------------------------------------------------------------------------