Monday, April 08, 2019

Deep Dive into Design Patterns

Hands-On Design Patterns with Delphi Book CoverWhile writing Design Patterns with Delphi, I spent quite some time researching existing literature on design patterns implementation in Delphi, design patterns in other languages, other types of patterns, design principles and so on …

In case you would like to dig deeper than the book takes you, here is my reading list.

Design Patterns Essentials

Software design pattern

Computer Science Design Patterns

The 23 patterns from the GoF

Design Patterns with examples in different languages (including Delphi)     

Gang of Four Design Patterns Reference Sheet

Programming principles

Design principles and design patterns

SOLID

Don't Repeat Yourself (DRY)

KISS

YAGNI (You Ain't Gonna Need It)

Software Design Patterns Are Not Goals, They Are Tools

I'm Sick Of GoF Design Patterns

Software Development AntiPatterns

Big Ball of Mud

Design Patterns for Humans

Spring4D
  
MMX Code Explorer

Singleton

https://en.wikipedia.org/wiki/Singleton_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Singleton

http://www.yanniel.info/2010/10/singleton-pattern-delphi.html

https://ibeblog.com/2010/08/18/delphi-singleton-patterns/

https://stackoverflow.com/a/1409672/4997

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Creational.Singleton

https://stackoverflow.com/questions/1409593/creating-a-singleton-in-delphi-using-the-new-features-of-d2009-and-d2010

https://sourcemaking.com/design_patterns/singleton

https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/

https://github.com/kamranahmedse/design-patterns-for-humans#-singleton

Dependency injection 

https://en.wikipedia.org/wiki/Dependency_injection

http://www.nickhodges.com/post/Service-Locator-is-Indeed-an-Anti-pattern.aspx

https://softwareengineering.stackexchange.com/questions/135914/why-was-dependency-injection-pattern-not-included-in-the-gang-of-four/135982

https://stackoverflow.com/questions/4176520/what-is-the-difference-between-strategy-pattern-and-dependency-injection

Lazy Initialization

https://en.wikipedia.org/wiki/Lazy_initialization

Object pool

https://en.wikipedia.org/wiki/Object_pool_pattern

https://sourcemaking.com/design_patterns/object_pool

Factory method

https://en.wikipedia.org/wiki/Factory_method_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Factory_method   

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Creational.FactoryMethod                    

https://sourcemaking.com/design_patterns/factory_method

https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/

https://github.com/kamranahmedse/design-patterns-for-humans#-factory-method

Abstract factory

https://en.wikipedia.org/wiki/Abstract_factory_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Abstract_Factory

http://www.felix-colibri.com/papers/design_patterns/factory_and_bridge_patterns/factory_and_bridge_patterns.html#abstract_factory_pattern

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Creational.AbstractFactory

http://www.nickhodges.com/post/Delphi-and-the-Factory-Pattern-Simple-Factory.aspx

https://sourcemaking.com/design_patterns/abstract_factory

https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/

https://github.com/kamranahmedse/design-patterns-for-humans#-abstract-factory

Prototype

https://sourcemaking.com/design_patterns/prototype

https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/

https://en.wikipedia.org/wiki/Object_copying#Deep_copy

https://github.com/kamranahmedse/design-patterns-for-humans#-prototype

Builder

https://en.wikipedia.org/wiki/Builder_pattern

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Creational.Builder

https://sourcemaking.com/design_patterns/builder

https://schellingerhout.github.io/design%20patterns/design-patterns-creational-delphi/

https://github.com/kamranahmedse/design-patterns-for-humans#-builder

Composite

https://en.wikipedia.org/wiki/Composite_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Composite

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Composite

https://sourcemaking.com/design_patterns/composite

https://github.com/kamranahmedse/design-patterns-for-humans#-composite

Flyweight

https://en.wikipedia.org/wiki/Flyweight_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Flyweight

https://sourcemaking.com/design_patterns/flyweight

https://github.com/kamranahmedse/design-patterns-for-humans#-flyweight

https://en.wikipedia.org/wiki/String_interning   

Marker interface

https://en.wikipedia.org/wiki/Marker_interface_pattern

Bridge

https://stackoverflow.com/questions/350404/how-do-the-proxy-decorator-adapter-and-bridge-patterns-differ

https://en.wikipedia.org/wiki/Bridge_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Bridge

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Bridge

https://sourcemaking.com/design_patterns/bridge

http://www.felix-colibri.com/papers/design_patterns/factory_and_bridge_patterns/factory_and_bridge_patterns.html#the_bridge_design_pattern

https://simpleprogrammer.com/design-patterns-simplified-the-bridge-pattern/

https://github.com/kamranahmedse/design-patterns-for-humans#-bridge

https://stackoverflow.com/q/319728/4997

Adapter

https://en.wikipedia.org/wiki/Adapter_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Adapter

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Adapter     

https://sourcemaking.com/design_patterns/adapter

https://github.com/kamranahmedse/design-patterns-for-humans#-adapter

Proxy

https://en.wikipedia.org/wiki/Proxy_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Proxy

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Proxy

https://sourcemaking.com/design_patterns/proxy

https://github.com/kamranahmedse/design-patterns-for-humans#-proxy

Decorator

https://en.wikipedia.org/wiki/Decorator_pattern

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Decorator

https://sourcemaking.com/design_patterns/decorator

https://github.com/kamranahmedse/design-patterns-for-humans#-decorator

Facade

https://en.wikipedia.org/wiki/Facade_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Facade

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Structural.Facade

https://sourcemaking.com/design_patterns/facade

https://github.com/kamranahmedse/design-patterns-for-humans#-facade

Null object

https://en.wikipedia.org/wiki/Null_object_pattern

https://sourcemaking.com/design_patterns/null_object

Template method

https://en.wikipedia.org/wiki/Template_method_pattern

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.TemplateMethod

https://www.codeproject.com/Articles/516094/TemplateplusMethodplusDesignplusPatternplusinplusD

https://sourcemaking.com/design_patterns/template_method

https://github.com/kamranahmedse/design-patterns-for-humans#-template-method

Command

https://en.wikipedia.org/wiki/Command_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Command

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Command

https://sourcemaking.com/design_patterns/command

https://github.com/kamranahmedse/design-patterns-for-humans#-command

https://stackoverflow.com/q/6064116/4997

State

https://en.wikipedia.org/wiki/State_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/State

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.State

https://sourcemaking.com/design_patterns/state

https://sourcemaking.com/design_patterns/state/delphi

https://github.com/kamranahmedse/design-patterns-for-humans#-state

https://en.wikipedia.org/wiki/Finite-state_machine

Iterator

https://en.wikipedia.org/wiki/Iterator_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Iterator

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Iterator

https://sourcemaking.com/design_patterns/iterator

https://github.com/kamranahmedse/design-patterns-for-humans#-iterator

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Declarations_and_Statements_(Delphi)#For_Statements

Visitor

https://en.wikipedia.org/wiki/Visitor_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Visitor

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Visitor

https://sourcemaking.com/design_patterns/visitor

https://sourcemaking.com/design_patterns/visitor/delphi     

https://github.com/kamranahmedse/design-patterns-for-humans#-visitor   

Observer

https://en.wikipedia.org/wiki/Observer_pattern

https://en.wikipedia.org/wiki/Publish–subscribe_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Observer

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Observer

https://github.com/spinettaro/delphi-event-bus

https://sourcemaking.com/design_patterns/observer/delphi

https://github.com/kamranahmedse/design-patterns-for-humans#-observer

http://docwiki.embarcadero.com/Libraries/en/System.Messaging.TMessageManager

http://docwiki.embarcadero.com/RADStudio/en/Using_the_RTL_Cross-Platform_Messaging_Solution

http://docwiki.embarcadero.com/RADStudio/en/Sending_and_Receiving_Messages_Using_the_RTL

http://docwiki.embarcadero.com/Libraries/en/System.Classes.TComponent.Observers

Memento

https://en.wikipedia.org/wiki/Memento_pattern

https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Memento

https://github.com/jimmckeeth/DelphiPatterns/tree/master/Behavioral.Memento

https://sourcemaking.com/design_patterns/memento

https://github.com/kamranahmedse/design-patterns-for-humans#-memento

Lock

https://en.wikipedia.org/wiki/Lock_(computer_science)

https://en.wikipedia.org/wiki/Spinlock

Lock striping

https://netjs.blogspot.si/2016/05/lock-striping-in-java-concurrency.html

Double-checked locking

https://en.wikipedia.org/wiki/Double-checked_locking

https://en.wikipedia.org/wiki/Test_and_test-and-set

Optimistic locking

https://www.javaworld.com/article/2075406/java-web-development/optimistic-locking-pattern-for-ejbs.html

https://martinfowler.com/eaaCatalog/optimisticOfflineLock.html

https://en.wikipedia.org/wiki/Optimistic_concurrency_control

Readers-writer lock

https://en.wikipedia.org/wiki/Readers–writer_lock

https://docs.microsoft.com/en-us/windows/desktop/sync/slim-reader-writer--srw--locks

Thread pool

https://en.wikipedia.org/wiki/Thread_pool

https://stackoverflow.com/questions/47504201/delphi-ttask-and-tthreadpool

Messaging

https://en.wikipedia.org/wiki/Message_passing

https://en.wikipedia.org/wiki/Message_queue

Future

https://en.wikipedia.org/wiki/Futures_and_promises

Pipeline

https://en.wikipedia.org/wiki/Staged_event-driven_architecture

Designing Delphi programs

https://en.wikipedia.org/wiki/Event-driven_programming

http://blong.com/Articles/Actions/Actions.htm

https://github.com/andrea-magni/TFrameStand

https://martinfowler.com/eaaCatalog/tableModule.html     

https://stackoverflow.com/questions/433819/table-module-vs-domain-model 

http://docwiki.embarcadero.com/RADStudio/en/LiveBindings_in_RAD_Studio

https://www.embarcadero.com/images/dm/technical-papers/understanding_rad_studio_livebindings.pdf

Other kinds of patterns

https://en.wikipedia.org/wiki/Exception_handling

http://wiki.c2.com/?ExceptionPatterns

http://docwiki.embarcadero.com/Libraries/en/System.TObject.Destroy

http://www.heaventools.com/eurekalog-exception-logger.htm

http://www.madshi.net/madExceptDescription.htm

https://github.com/project-jedi/jvcl

https://en.wikipedia.org/wiki/Debugging_patterns

https://git-scm.com/docs/git-bisect

http://www.washi.cs.waseda.ac.jp/wp-content/uploads/2017/03/Woei-Kae-Chen.pdf

https://github.com/colinj/Functional

https://fsharpforfunandprofit.com/fppatterns/

https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms

Books & papers

Architectural Patterns, Pethuru Raj, Anupama Raman, Harihara Subramanian

Coding in Delphi, Nick Hodges

Concurrency with Modern C++, Rainer Grimm

Concurrent Patterns and Best Practices, Atul S. Khot

Dependency Injection in Delphi, Nick Hodges

Design Patterns for Humans, Kamran Ahmed

Design Patterns Past and Future, Aleksandar Bulajic

Design Patterns - Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Dive Into Design Patterns, Alexander Shvets

Java Design Patterns, Devendra Singh

More Coding in Delphi, Nick Hodges

The Null Object Pattern, Bobby Woolf

No comments:

Post a Comment