{"id":16458205,"url":"https://github.com/boromir674/software-patterns","last_synced_at":"2025-10-27T09:31:13.381Z","repository":{"id":38099439,"uuid":"434613952","full_name":"boromir674/software-patterns","owner":"boromir674","description":"Reusable Software Design Patterns with types, in Python.","archived":false,"fork":false,"pushed_at":"2022-11-19T21:52:34.000Z","size":348,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-01T04:31:49.035Z","etag":null,"topics":["pypi-package","python-package","python-patterns","software-design","software-design-patterns","software-patterns"],"latest_commit_sha":null,"homepage":"https://software-patterns.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boromir674.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-03T13:54:23.000Z","updated_at":"2023-03-07T09:48:40.000Z","dependencies_parsed_at":"2022-08-18T10:33:08.775Z","dependency_job_id":null,"html_url":"https://github.com/boromir674/software-patterns","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fsoftware-patterns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fsoftware-patterns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fsoftware-patterns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boromir674%2Fsoftware-patterns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boromir674","download_url":"https://codeload.github.com/boromir674/software-patterns/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238471993,"owners_count":19478141,"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":["pypi-package","python-package","python-patterns","software-design","software-design-patterns","software-patterns"],"created_at":"2024-10-11T10:44:36.149Z","updated_at":"2025-10-27T09:31:08.006Z","avatar_url":"https://github.com/boromir674.png","language":"Python","readme":"Software Patterns\n#################\n\nA Python package with common Software Design Patterns.\n\n\n.. start-badges\n\n.. list-table::\n    :stub-columns: 1\n\n    * - build\n      - | |circleci| |codecov| |docs|\n\n    * - package\n      - | |pypi| |py_versions| |nb-pypi-downloads| |wheel| |commits_since|\n\n    * - code quality\n      - |better_code_hub| |scrutinizer|\n\n\n|\n| **Documentation:** https://software-patterns.readthedocs.io/en/master\n| **Source Code:** https://github.com/boromir674/software-patterns/tree/master\n| **CI/CD:** https://circleci.com/gh/boromir674/software-patterns/\n|\n\n\nOverview\n========\n\nThis repository hosts the open-source code of the Software Patterns project.\nThe project's main component is the `software-patterns` python package hosted on Pypi at https://pypi.org/project/software-patterns\nIt also features online Documentation Pages hosted at https://software-patterns.readthedocs.io/ and\na public `CI workflow`_ hosted on CircleCI.\n\n\nWhat are Software Design Patterns?\n\nSoftware Engineers are employing various designs and solutions to solve their problems.\nThe emerging (software) patterns, among the code solutions, targeting reoccuring problems have been studied and\nformalized in terms of how they are used, what problem they solve and why they are a fit candidate to solve it.\nThese code designs, which are frequently found in various code bases, are known as Software Design Patterns.\n\n\nThe `software-patterns` package exposes a set of Python Classes that allow convient usage of common\nSoftware Design Patterns.\n\n\nDesign Patterns implemented:\n\n* Notification (aka Broadcast/Listener pattern)\n* Object Pool (aka Memoize)\n* Classes Registry (aka Abstract Factory)\n* Proxy\n\n\nInstallation\n------------\n\nInstall from the Pypi server:\n\n::\n\n    pip install software-patterns\n\n.. inclusion-marker-do-not-remove\n\n\nQuickstart\n----------\n\n\nExample code to use the `factory` pattern in the form of a `(sub) class registry`:\n\n.. code-block:: python\n\n    from software_patterns import SubclassRegistry\n\n    class MyClassRegistry(metaclass=SubclassRegistry):\n        pass\n\n    @MyClassRegistry.register_as_subclass('a')\n    class ClassA:\n        def __init__(self, number):\n            self.attr = number\n\n    @MyClassRegistry.register_as_subclass('b')\n    class ClassB:\n        def __init__(self, number):\n            self.attr = number - 1\n\n    assert MyClassRegistry.subclasses == {'a': ClassA, 'b': ClassB}\n\n    instance_a = MyClassRegistry.create('a', 10)\n    assert type(instance_a) == ClassA\n    assert instance_a.attr == 10\n\n    assert isinstance(instance_a, ClassA)\n\n    instance_b = MyClassRegistry.create('b', 10)\n    assert type(instance_b) == ClassB\n    assert instance_b.attr == 9\n\n    assert isinstance(instance_b, ClassB)\n\n\n\n\n.. |circleci|  image:: https://img.shields.io/circleci/build/github/boromir674/software-patterns/master?logo=circleci\n    :alt: CircleCI\n    :target: https://circleci.com/gh/boromir674/software-patterns/tree/master\n\n\n.. |codecov| image:: https://codecov.io/gh/boromir674/software-patterns/branch/master/graph/badge.svg?token=3POTVNU0L4\n    :alt: Codecov\n    :target: https://app.codecov.io/gh/boromir674/software-patterns/branch/master\n\n\n.. |docs| image:: https://img.shields.io/readthedocs/software-patterns/master?logo=readthedocs\n    :target: https://software-patterns.readthedocs.io/en/master/?badge=master\n    :alt: Read the Docs (version)\n\n.. |pypi| image:: https://img.shields.io/pypi/v/software-patterns?color=blue\u0026label=pypi\u0026logo=pypi\u0026logoColor=%23849ed9\n    :alt: PyPI\n    :target: https://pypi.org/project/software-patterns/\n\n.. |wheel| image:: https://img.shields.io/pypi/wheel/software-patterns?logo=python\u0026logoColor=%23849ed9\n    :alt: PyPI - Wheel\n    :target: https://pypi.org/project/software-patterns\n\n.. |py_versions| image:: https://img.shields.io/pypi/pyversions/software-patterns?color=blue\u0026logo=python\u0026logoColor=%23849ed9\n    :alt: PyPI - Python Version\n    :target: https://pypi.org/project/software-patterns\n\n.. |commits_since| image:: https://img.shields.io/github/commits-since/boromir674/software-patterns/v2.0.0/master?color=blue\u0026logo=Github\n    :alt: GitHub commits since tagged version (branch)\n    :target: https://github.com/boromir674/software-patterns/compare/v2.0.0..master\n\n\n\n.. |better_code_hub| image:: https://bettercodehub.com/edge/badge/boromir674/software-patterns?branch=master\n    :alt: Better Code Hub\n    :target: https://bettercodehub.com/\n\n.. |scrutinizer| image:: https://img.shields.io/scrutinizer/quality/g/boromir674/software-patterns/master?logo=scrutinizer-ci\n    :alt: Scrutinizer code quality\n    :target: https://scrutinizer-ci.com/g/boromir674/software-patterns/?branch=master\n\n.. |nb-pypi-downloads| image:: https://img.shields.io/pypi/dm/software-patterns?logo=pypi\u0026logoColor=%239AB3EE\n    :alt: PyPI - Downloads\n\n\n.. _`CI Workflow`: https://circleci.com/gh/boromir674/software-patterns\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboromir674%2Fsoftware-patterns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboromir674%2Fsoftware-patterns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboromir674%2Fsoftware-patterns/lists"}