Skip to content

πŸ‘¨β€πŸ’» Curated list of Swift design patterns, recipes and idioms

License

Notifications You must be signed in to change notification settings

alikenski/design-patterns

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Swift Patterns
build-status progress language contact license

A curated collection of idiomatic design & application patterns for Swift language.

Creational Patterns

Pattern Description Status
Abstract Factory Provides an interface for creating families of releated objects βœ”
Builder Builds a complex object using simple objects ✘
Factory Method Defers instantiation of an object to a specialized function for creating instances βœ”
Object Pool Instantiates and maintains a group of objects instances of the same type ✘
Singleton Restricts instantiation of a type to one object βœ”

Structural Patterns

Pattern Description Status
Bridge Decouples an interface from its implementation so that the two can vary independently ✘
Composite Encapsulates and provides access to a number of different objects ✘
Decorator Adds behavior to an object, statically or dynamically ✘
Facade Uses one type as an API to a number of others ✘
Flyweight Reuses existing instances of objects with similar/identical state to minimize resource usage ✘
Proxy Provides a surrogate for an object to control it's actions ✘

Behavioral Patterns

Pattern Description Status
Chain of Responsibility Avoids coupling a sender to receiver by giving more than object a chance to handle the request ✘
Command Bundles a command and arguments to call later ✘
Mediator Connects objects and acts as a proxy ✘
Memento Generate an opaque token that can be used to go back to a previous state ✘
Observer Provide a callback for notification of events/changes to data ✘
Registry Keep track of all subclasses of a given class ✘
State Encapsulates varying behavior for the same object based on its internal state ✘
Strategy Enables an algorithm's behavior to be selected at runtime ✘
Template Defines a skeleton class which defers some methods to subclasses ✘
Visitor Separates an algorithm from an object on which it operates ✘

Synchronization Patterns

Pattern Description Status
Condition Variable Provides a mechanism for threads to temporarily give up access in order to wait for some condition ✘
Lock/Mutex Enforces mutual exclusion limit on a resource to gain exclusive access ✘
Monitor Combination of mutex and condition variable patterns ✘
Read-Write Lock Allows parallel read access, but only exclusive access on write operations to a resource ✘
Semaphore Allows controlling access to a common resource ✘

Concurrency Patterns

Pattern Description Status
N-Barrier Prevents a process from proceeding until all N processes reach to the barrier ✘
Bounded Parallelism Completes large number of independent tasks with resource limits ✘
Broadcast Transfers a message to all recipients simultaneously ✘
Coroutines Subroutines that allow suspending and resuming execution at certain locations ✘
Generators Yields a sequence of values one at a time ✘
Reactor Demultiplexes service requests delivered concurrently to a service handler and dispatches them syncronously to the associated request handlers ✘
Parallelism Completes large number of independent tasks ✘
Producer Consumer Separates tasks from task executions ✘

Messaging Patterns

Pattern Description Status
Fan-In Funnels tasks to a work sink (e.g. server) ✘
Fan-Out Distributes tasks among workers (e.g. producer) ✘
Futures & Promises Acts as a place-holder of a result that is initially unknown for synchronization purposes ✘
Publish/Subscribe Passes information to a collection of recipients who subscribed to a topic ✘
Push & Pull Distributes messages to multiple workers, arranged in a pipeline ✘

Stability Patterns

Pattern Description Status
Bulkheads Enforces a principle of failure containment (i.e. prevents cascading failures) ✘
Circuit-Breaker Stops the flow of the requests when requests are likely to fail ✘
Deadline Allows clients to stop waiting for a response once the probability of response becomes low (e.g. after waiting 10 seconds for a page refresh) ✘
Fail-Fast Checks the availability of required resources at the start of a request and fails if the requirements are not satisfied ✘
Handshaking Asks a component if it can take any more load, if it can't, the request is declined ✘
Steady-State For every service that accumulates a resource, some other service must recycle that resource ✘

Profiling Patterns

Pattern Description Status
Timing Functions Wraps a function and logs the execution ✘

Idioms

Pattern Description Status
Functional Options Allows creating clean APIs with sane defaults and idiomatic overrides ✘

Anti-Patterns

Pattern Description Status
Cascading Failures A failure in a system of interconnected parts in which the failure of a part causes a domino effect ✘

Credits

Inspired by:

Dependencies

Support

If you have a question, find a bug, or just want to say hi, please open an issue on GitHub.

If you want to contribute, please read the guide.

License

MIT License Β© Islam Temirbek

About

πŸ‘¨β€πŸ’» Curated list of Swift design patterns, recipes and idioms

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 100.0%