{"id":19784323,"url":"https://github.com/alexprut/design-patterns-java","last_synced_at":"2025-04-30T22:32:08.377Z","repository":{"id":31171724,"uuid":"34731957","full_name":"alexprut/design-patterns-java","owner":"alexprut","description":"📗 Classic OOP Design Patterns from GoF, implemented in Java.","archived":false,"fork":false,"pushed_at":"2024-03-13T14:44:33.000Z","size":1056,"stargazers_count":33,"open_issues_count":0,"forks_count":24,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-06T05:51:11.453Z","etag":null,"topics":["design-patterns","gof","java","oop"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexprut.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-04-28T13:25:42.000Z","updated_at":"2025-01-07T06:20:21.000Z","dependencies_parsed_at":"2024-11-12T06:21:20.250Z","dependency_job_id":null,"html_url":"https://github.com/alexprut/design-patterns-java","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexprut%2Fdesign-patterns-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexprut%2Fdesign-patterns-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexprut%2Fdesign-patterns-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexprut%2Fdesign-patterns-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexprut","download_url":"https://codeload.github.com/alexprut/design-patterns-java/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251791744,"owners_count":21644449,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design-patterns","gof","java","oop"],"created_at":"2024-11-12T06:11:11.404Z","updated_at":"2025-04-30T22:32:08.026Z","avatar_url":"https://github.com/alexprut.png","language":"Java","readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://github.com/alexprut/design-patterns-java/raw/master/logo.png\" height=\"300\" height=\"auto\"/\u003e\n\u003ch1\u003eDesign Patterns in Java\u003c/h1\u003e\n\n[![Google Java Style](https://img.shields.io/badge/style%20guide-google-yellow.svg)](https://github.com/google/google-java-format)\n[![MIT](https://img.shields.io/dub/l/vibe-d.svg)](https://github.com/alexprut/design-patterns-java/blob/master/LICENSE)\n![Build Status](https://github.com/alexprut/design-patterns-java/actions/workflows/build.yml/badge.svg)\n\u003cp\u003eClassic OOP Design Patterns from \u003ca href=\"https://en.wikipedia.org/?title=Design_Patterns\"\u003eGoF\u003c/a\u003e, implemented in Java.\u003c/p\u003e\n\u003c/div\u003e\n\u003cbr /\u003e\n\nDesign Patterns Implemented\n---------------------------\n#### Structural\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-class-adapter.png) –\n[Class Adapter](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/structural/class_adapter)\n— _allows classes with incompatible interfaces to work together by wrapping its own interface around that of an already existing class_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-object-adapter.png) –\n[Object Adapter](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/structural/object_adapter)\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-facade.png) –\n[Facade](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/structural/facade)\n— _provides a simplified interface to a large body of code_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-composite.png) –\n[Composite](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/structural/composite)\n— _composes zero-or-more similar objects so that they can be manipulated as one object_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-decorator.png) –\n[Decorator](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/structural/decorator)\n— _dynamically adds/overrides behaviour in an existing method of an object_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-proxy.png) –\n[Proxy](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/structural/proxy)\n— _provides a placeholder for another object to control access, reduce cost, and reduce complexity_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-flyweight.png) –\n[Flyweight](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/structural/flyweight)\n— _reduces the cost of creating and manipulating a large number of similar objects_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-bridge.png) –\n[Bridge](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/structural/bridge)\n— _decouples an abstraction from its implementation so that the two can vary independently_\n\n#### Creational\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-factory-method.png) –\n[Factory Method](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/creational/factory_method)\n— _creates objects without specifying the exact class to create_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-abstract-factory.png) –\n[Abstract Factory](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/creational/abstract_factory)\n— _groups object factories that have a common theme_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-prototype.png) –\n[Prototype](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/creational/prototype)\n— _creates objects by cloning an existing object_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-singleton.png) –\n[Singleton](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/creational/singleton)\n— _restricts object creation for a class to only one instance_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-builder.png) –\n[Builder](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/creational/builder)\n— _constructs complex objects by separating construction and representation_\n\n#### Behavioral\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-template-method.png) –\n[Template Method](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/template_method)\n— _defines the skeleton of an algorithm as an abstract class, allowing its subclasses to provide concrete behavior_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-strategy.png) –\n[Strategy](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/strategy)\n— _allows one of a family of algorithms to be selected on-the-fly at runtime_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-state.png) –\n[State](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/state)\n— _allows an object to alter its behavior when its internal state changes_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-command.png) –\n[Command](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/command)\n— _creates objects which encapsulate actions and parameters_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-observer.png) –\n[Observer](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/observer)\n— _is a publish/subscribe pattern which allows a number of observer objects to see an event_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-mediator.png) –\n[Mediator](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/mediator)\n— _allows loose coupling between classes by being the only class that has detailed knowledge of their methods_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-memento.png) –\n[Memento](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/memento)\n— _provides the ability to restore an object to its previous state (undo)_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-iterator.png) –\n[Iterator](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/iterator)\n— _accesses the elements of an object sequentially without exposing its underlying representation_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-visitor.png) –\n[Visitor](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/visitor)\n— _separates an algorithm from an object structure by moving the hierarchy of methods into one object_\n* [UML](https://github.com/alexprut/design-patterns-java/tree/master/src/main/resources/img/uml-chain-of-responsability.png) –\n[Chain of Responsability](https://github.com/alexprut/design-patterns-java/tree/master/src/main/java/design_patterns/behavioral/chain_of_responsibility)\n— _delegates commands to a chain of processing objects_\n\n### Build\n```\n./gradlew clean build\n```\n\n### Test\n```\n./gradlew test\n```\n\nLicense\n=======\nLicensed under [MIT](https://github.com/alexprut/design-patterns-java/blob/master/LICENSE).","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexprut%2Fdesign-patterns-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexprut%2Fdesign-patterns-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexprut%2Fdesign-patterns-java/lists"}