Difference between revisions of "DesignPatterns"

From Lost In Wonderlands
Jump to: navigation, search
(Design Patterns)
(See also)
 
(37 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
= Design Patterns =
 
= Design Patterns =
 
''by paul.plaquette, Senior Software Engineer, Trilda Open Source''
 
  
 
'''NeXT Steps'''
 
'''NeXT Steps'''
Line 19: Line 17:
  
 
== See also ==
 
== See also ==
 
+
* [https://en.wikipedia.org/wiki/Index_of_object-oriented_programming_articles Index_of_object-oriented_programming_articles]
 +
* [[SoftwareArchitecture]]
 
* [[DesignPatterns]]
 
* [[DesignPatterns]]
 
* [[AntiPatterns]]
 
* [[AntiPatterns]]
Line 26: Line 25:
 
* [[SecureCode]]
 
* [[SecureCode]]
 
* [[UML]]
 
* [[UML]]
 +
* [[SOLID]]
 +
* [[Packages Principle]]
 +
* [[KISS]]
 +
* [[DRY]]
 +
* [[GRASP]]
 +
* [[YAGNI]]
  
  
Line 32: Line 37:
 
== Design Patterns Catalog ==
 
== Design Patterns Catalog ==
  
* '''Creational Patterns'''
+
=== Gang Of Four Patterns ===
  * [[FactoryPattern | Factory Pattern]]
+
  * [[BuilderPattern |  Builder Pattern ]]
+
  * [[FactoryMethod Pattern | Factory Method Pattern]]
+
  * [[PrototypePattern | Prototype Pattern]]
+
  * [[SingletonPattern | Singleton Pattern]]
+
   
+
  
* '''Structural Patterns'''
+
* https://en.wikipedia.org/wiki/Design_Patterns
  * [[AdapterPattern | Adapter Pattern]]
+
  * [[BridgePattern | Bridge Pattern]]
+
  * [[CompositePattern | Composite Pattern]]
+
  * [[DecoratorPattern | Decorator Pattern ]]
+
  * [[FacadePattern | Facade Pattern]]
+
  * [[FlyweightPattern | Flyweight Pattern]]
+
  * [[ProxyPattern | Proxy Pattern]]
+
  * [[WrapperPattern | Wrapper Pattern]]
+
  
* '''Behavioral Patterns'''
+
Several implementation of Above design patterns in C++
  * [[ChainOfResponsibilityPattern | Chain Of Responsibility Pattern]]
+
* https://github.com/BartVandewoestyne/Design-Patterns-GoF
  * [[Chaining Pattern | Chaining Pattern ]]
+
* https://github.com/zebmason/GoFRefactored/blob/master/README.md
  * [[CommandPattern |  Command Pattern]]
+
* http://www.informit.com/articles/article.aspx?p=1404056
  * [[InterpreterPattern | Interpreter Pattern]]
+
* https://www.infoq.com/presentations/gof-patterns-c-plus-plus-boost/
  * [[IteratorPattern | Iterator Pattern]]
+
* http://www.c-jump.com/CIS75/Week11/
  * [[MediatorPattern | Mediator Pattern]]
+
* http://www.c-jump.com/Download/Patterns/Prototype/html/
  * [[MementoPattern | Memento Pattern]]
+
* https://github.com/wangqiang8511/C---Design-Patterns-Examples/
  * [[ObserverPattern | Observer Pattern]]
+
 
  * [[StatePattern | State Pattern]]
+
==== Creational Patterns ====
  * [[StrategyPattern | Strategy Pattern]]
+
* https://en.wikipedia.org/wiki/Creational_pattern
  * [[TemplateMethod Pattern | Template Method Pattern]]
+
 
  * [[VisitorPattern | Visitor Pattern]]
+
 
 +
* Abtract Factory Pattern, https://en.wikipedia.org/wiki/Abstract_factory_pattern
 +
* Builder Pattern, https://en.wikipedia.org/wiki/Builder_pattern
 +
* Factory Method Pattern , https://en.wikipedia.org/wiki/Factory_method_pattern
 +
* Prototype Pattern, https://en.wikipedia.org/wiki/Prototype_pattern
 +
* Singleton Pattern, https://en.wikipedia.org/wiki/Singleton_pattern
 +
 
 +
==== Structural Patterns ====
 +
* https://en.wikipedia.org/wiki/Structural_pattern
 +
 
 +
 
 +
* Adapter Pattern, https://en.wikipedia.org/wiki/Adapter_pattern
 +
* Bridge Pattern, https://en.wikipedia.org/wiki/Bridge_pattern
 +
* Composite Pattern, https://en.wikipedia.org/wiki/Composite_pattern
 +
* Decorator Pattern, https://en.wikipedia.org/wiki/Decorator_pattern
 +
* Facade Pattern, https://en.wikipedia.org/wiki/Facade_pattern
 +
* Flyweight Pattern, https://en.wikipedia.org/wiki/Flyweight_pattern
 +
* Proxy Pattern,https://en.wikipedia.org/wiki/Proxy_pattern
 +
* Wrapper Pattern
 +
 
 +
==== Behavioral Patterns ====
 +
* https://en.wikipedia.org/wiki/Behavioral_pattern 
 +
 
 +
 
 +
* Chain Of Responsibility Pattern, https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern
 +
* Chaining Pattern, https://en.wikipedia.org/wiki/Command_pattern
 +
* Command Pattern,https://en.wikipedia.org/wiki/Command_pattern
 +
* Interpreter Pattern, https://en.wikipedia.org/wiki/Interpreter_pattern
 +
* Iterator Pattern, https://en.wikipedia.org/wiki/Iterator_pattern
 +
* Mediator Pattern, https://en.wikipedia.org/wiki/Mediator_pattern
 +
* Memento Pattern, https://en.wikipedia.org/wiki/Memento_pattern
 +
* Observer Pattern, https://en.wikipedia.org/wiki/Observer_pattern
 +
* State Pattern, https://en.wikipedia.org/wiki/State_pattern
 +
* Strategy Pattern, https://en.wikipedia.org/wiki/Strategy_pattern
 +
* Template Method Pattern, https://en.wikipedia.org/wiki/Template_method_pattern
 +
* Visitor Pattern, https://en.wikipedia.org/wiki/Visitor_pattern
 +
 
 +
=== Concurrency Patterns ===
 +
 
 +
* https://en.wikipedia.org/wiki/Concurrency_pattern
 +
 
 +
 
 +
* Active Object, https://en.wikipedia.org/wiki/Active_object
 +
* Asynchronous Method Invocation, https://en.wikipedia.org/wiki/Asynchronous_method_invocation
 +
* Balking pattern, https://en.wikipedia.org/wiki/Balking_pattern
 +
* Binding properties pattern, https://en.wikipedia.org/wiki/Binding_properties_pattern
 +
* Double Checked Locking Pattern, https://en.wikipedia.org/wiki/Double-checked_locking
 +
* Guarded suspension, https://en.wikipedia.org/wiki/Guarded_suspension
 +
* Join Pattern, https://en.wikipedia.org/wiki/Join-pattern
 +
* Leaders/followers pattern
 +
* Lock Pattern, https://en.wikipedia.org/wiki/Lock_(computer_science)
 +
* Monitor Object, https://en.wikipedia.org/wiki/Monitor_(synchronization)
 +
* Proactor Pattern, https://en.wikipedia.org/wiki/Proactor_pattern
 +
* Reactor pattern, https://en.wikipedia.org/wiki/Reactor_pattern
 +
* Readers writers lock pattern, https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock
 +
* Scheduling pattern, https://en.wikipedia.org/wiki/Scheduling_(computing)
 +
* Thread pool pattern, https://en.wikipedia.org/wiki/Thread_pool
 +
* Thread-local storage, https://en.wikipedia.org/wiki/Thread-local_storage
 +
 
 +
 
 +
==== Architectural_pattern ====
 +
* https://en.wikipedia.org/wiki/Architectural_pattern
 +
 
 +
* Front Controller,  https://en.wikipedia.org/wiki/Front_controller
 +
* Interceptor Pattern, https://en.wikipedia.org/wiki/Interceptor_pattern
 +
* Model-View-Controller, https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
 +
* Multi-Tiers, https://en.wikipedia.org/wiki/Multitier_architecture
 +
* Specification Pattern, https://en.wikipedia.org/wiki/Specification_pattern
 +
* Publish-Subscribe Pattern, https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern
 +
* Naked Objects, https://en.wikipedia.org/wiki/Naked_objects
 +
* Service Locator Pattern, https://en.wikipedia.org/wiki/Service_locator_pattern
 +
* Active Record Pattern, https://en.wikipedia.org/wiki/Active_record_pattern
 +
* Identity Map Pattern, https://en.wikipedia.org/wiki/Identity_map_pattern
 +
* Inversion of Control, https://en.wikipedia.org/wiki/Inversion_of_control
 +
* Action-Domain-Responder, https://en.wikipedia.org/wiki/Action%E2%80%93Domain%E2%80%93Responder
 +
* Data Access Object, https://en.wikipedia.org/wiki/Data_access_object
 +
* Data Tranfer Object, https://en.wikipedia.org/wiki/Data_transfer_object
 +
* HightPerformance Data Access,  Layerhttp://rlacovara.blogspot.com/2009/02/high-performance-data-access-layer.html
 +
 
 +
===== Actor Model =====
 +
* Actor model
 +
** https://en.wikipedia.org/wiki/Actor_model
 +
** https://fr.wikipedia.org/wiki/Mod%C3%A8le_d%27acteur
 +
** https://www.brianstorti.com/the-actor-model/
 +
** https://dassur.ma/things/actormodel/
 +
** https://mattferderer.com/what-is-the-actor-model-and-when-should-you-use-it
 +
** https://monades.roperzh.com/get-to-know-the-actor-model/
 +
** https://www.techopedia.com/definition/25150/actor-model
 +
** https://www.youtube.com/watch?v=ELwEdb_pD0k
 +
** https://www.youtube.com/watch?v=lPTqcecwkJg
 +
** https://blog.soat.fr/2018/01/les-systemes-reactifs-et-le-pattern-actor-model/
 +
** https://doc.akka.io/docs/akka/current/general/actors.html
 +
** https://www.infoq.com/news/2014/10/intro-actor-model/
 +
** https://hal.archives-ouvertes.fr/hal-01163534v5/document
 +
** https://arxiv.org/ftp/arxiv/papers/1008/1008.1459.pdf
 +
** https://fr.slideshare.net/opencredo/haufe-msaday-the-actor-model-an-alternative-approach-to-concurrency-by-lorenzo-nicora
 +
* implementation
 +
** https://en.wikipedia.org/wiki/Actor_model_implementation
 +
** https://rocketeer.be/articles/concurrency-in-erlang-scala/
 +
** https://actor-framework.org
 +
* microsoft
 +
** https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-introduction
 +
** https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/index
 +
** https://docs.microsoft.com/en-us/previous-versions/microsoft-robotics/bb648752(v=msdn.10)
 +
** https://docs.microsoft.com/en-us/previous-versions/microsoft-robotics/bb483056(v=msdn.10)
 +
** https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/dd492627(v=vs.100)
 +
 
 +
=== Other Patterns ===
 +
* Blackboard Pattern, https://en.wikipedia.org/wiki/Blackboard_(design_pattern)
 +
* Business Delegate Pattern, https://en.wikipedia.org/wiki/Business_delegate_pattern
 +
* Composite Entity Pattern, https://en.wikipedia.org/wiki/Composite_entity_pattern
 +
* Dependency Injection, https://en.wikipedia.org/wiki/Dependency_injection
 +
* Intercepting Filter Pattern, https://en.wikipedia.org/wiki/Intercepting_filter_pattern
 +
* Lazy Loading Pattern, https://en.wikipedia.org/wiki/Lazy_loading
 +
* Mock Objects Pattern, https://en.wikipedia.org/wiki/Mock_object
 +
* Null Objets Pattern, https://en.wikipedia.org/wiki/Null_Object_pattern
 +
* Object Pool Pattern, https://en.wikipedia.org/wiki/Object_pool_pattern
 +
* Servant Pattern, https://en.wikipedia.org/wiki/Servant_(design_pattern)
 +
* Twin Pattern, https://en.wikipedia.org/wiki/Twin_pattern
 +
* Type-Tunnel Pattern, https://en.wikipedia.org/wiki/Type_Tunnel_pattern
 +
* Game-Programming-Pattern, https://github.com/munificent/game-programming-patterns
 +
 
 +
=== Pattern-Oriented Software Architectures ===
 +
* Layers Pattern
 +
* Pipes And Filters Pattern
 +
* Blackboard Pattern
 +
* Broker Pattern
 +
* Presenter First Pattern, https://en.wikipedia.org/wiki/Presenter_first_(software_approach)
 +
* Action-Domain-Responder, https://en.wikipedia.org/wiki/Action–domain–responder
 +
* Model-View-Controller Pattern, https://en.wikipedia.org/wiki/Model–view–controller
 +
* Model-View-ViewModel (aka model–view–binder), https://en.wikipedia.org/wiki/Model–view–viewmodel
 +
* Model-View-Presenter pattern, https://en.wikipedia.org/wiki/Model–view–presenter
 +
* Model-View-Adapater pattern, https://en.wikipedia.org/wiki/Model–view–adapter
 +
* Presentation-Abstraction-Control Pattern,  https://en.wikipedia.org/wiki/Presentation–abstraction–control
 +
* Hierarchical_model–view–controller Pattern, https://en.wikipedia.org/wiki/Hierarchical_model–view–controller
 +
* Microkernel Pattern
 +
* Reflection Pattern
 +
* Whole-Part Pattern
 +
* Master-Slave Pattern
 +
* Proxy Pattern
 +
* Command Processor Pattern
 +
* View Handler Pattern
 +
* Forwarder-Receiver Pattern
 +
* Client-Dispatcher-Server Pattern
 +
* Publisher-Subscriber Pattern
 +
* NakedObjects, https://en.wikipedia.org/wiki/Naked_objects
 +
 
 +
== People ==
 +
* https://en.wikipedia.org/wiki/Christopher_Alexander
 +
* https://en.wikipedia.org/wiki/Erich_Gamma
 +
* https://en.wikipedia.org/wiki/Ralph_Johnson_(computer_scientist)
 +
* https://en.wikipedia.org/wiki/John_Vlissideshttps://en.wikipedia.org/wiki/John_Vlissides
 +
* https://en.wikipedia.org/wiki/Grady_Booch
 +
* https://en.wikipedia.org/wiki/Kent_Beck
 +
* https://en.wikipedia.org/wiki/Ward_Cunningham
 +
* https://en.wikipedia.org/wiki/Martin_Fowler
 +
* https://en.wikipedia.org/wiki/Robert_Cecil_Martin
 +
* https://en.wikipedia.org/wiki/Jim_Coplien
 +
* https://en.wikipedia.org/wiki/Douglas_C._Schmidt
 +
* https://en.wikipedia.org/wiki/Linda_Rising
  
* '''Pattern-Oriented Software Architectures'''
 
  * [[LayersPattern | Layers Pattern]]
 
  * [[PipesAndFiltersPattern | Pipes And Filters Pattern]]
 
  * [[BlackboardPattern | Blackboard Pattern]]
 
  * [[BrokerPattern | Broker Pattern]]
 
  * [[ModelViewControllerPattern | Model-View-Controller Pattern]]
 
  * [[PresentationAbstractionControl Pattern | Presentation-Abstraction-Control Patt]]
 
  * [[MicrokernelPattern | Microkernel Pattern]]
 
  * [[ReflectionPattern | Reflection Pattern]]
 
  * [[WholePartPattern | Whole-Part Pattern]]
 
  * [[MasterSlavePattern | Master-Slave Pattern]]
 
  * [[ProxyPattern | Proxy Pattern]]
 
  * [[CommandProcessorPattern | Command Processor Pattern]]
 
  * [[ViewHandlerPattern | View Handler Pattern]]
 
  * [[ForwarderReceiverPattern | Forwarder-Receiver Pattern]]
 
  * [[ClientDispatcherServerPattern | Client-Dispatcher-Server Pattern]]
 
  * [[PublisherSubscriberPattern | Publisher-Subscriber Pattern]]
 
  
 
== References ==
 
== References ==
  
* http://sourcemaking.com/
+
* http://archive.oredev.org/download/18.5bd7fa0510edb4a8ce4800019179/Bruce_Douglass_-_Realtime_design_Patterns.pdf
* http://shichuan.github.com/javascript-patterns/
+
* https://en.wikipedia.org/wiki/The_Hillside_Group
 +
* https://en.wikipedia.org/wiki/Portland_Pattern_Repository
 +
* http://c2.com/cgi/wiki?WelcomeVisitors
 +
* http://c2.com/cgi/wiki?HillsideGroup
 +
* http://sourcemaking.com/
 +
* http://shichuan.github.com/javascript-patterns/
 +
* https://en.wikipedia.org/wiki/Design_Patterns
 +
* https://en.wikipedia.org/wiki/Software_design_pattern
 +
* http://www.javaworld.com/article/2078675/core-java/design-patterns--the-big-picture--part-2--gang-of-four-classics-revisited.html
 +
* http://www.javabrahman.com/design-patterns/gof-gang-four-design-patterns/
 +
* http://codingplayground.blogspot.it/2009/01/design-pattern
 +
 
 +
* http://www.tutorialspoint.com/design_pattern/design_pattern_tutorial.pdf
 +
* https://csharpdesignpatterns.codeplex.com/
 +
* http://www.codeproject.com/KB/architecture/#Design+Patterns
 +
* https://msdn.microsoft.com/en-us/library/bb190165.aspx
 +
* https://delphipatterns.codeplex.com/
 +
 
 +
== Books ==
 +
* Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (Nov 10, 1994)
 +
* Design Pattern Explained, A New Persective on Object-Oriented Design, Alan Shalloway, James Trott,  Addison-Wesley, 1st Edition(July 9, 2001), 2nd Edition (October 22, 2004)
 +
* Professional (July 9, 2001), and second edition
 +
* Pattern-Oriented Software Architecture, Wiley, Vol 1 - 5
 +
* Real-Time Design Patterns: Robust Scalable Architecture for Real-Time Systems, Bruce Powel Douglass, Addison Wesley (September 27,2002)
 +
* Antipatterns, Identification, Refactoring, and Management, Philip A. Laplante, Clin J.Neill, Auerbach Publications (2006)
 +
* Refactoring: Improving the Design of Existing Code, Martin Fowler, Kent Beck, John Brant, William Opdyke, don Roberts, Addison-Wesley Professional, 1 edition (July 8, 1999)
  
* Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (Nov 10, 1994)
+
http://www.eventhelix.com/RealtimeMantra/Patterns/#.VuSjttwrKkA
* Design Pattern Explained, A New Persective on Object-Oriented Design, Alan Shalloway, James Trott,  Addison-Wesley, 1st Edition(July 9, 2001), 2nd Edition (October 22, 2004)
+
* Professional (July 9, 2001), and second edition
+
* Pattern-Oriented Software Architecture, Wiley, Vol 1 - 5
+
* Real-Time Design Patterns: Robust Scalable Architecture for Real-Time Systems, Bruce Powel Douglass, Addison Wesley (September 27,2002)
+
* Antipatterns, Identification, Refactoring, and Management, Philip A. Laplante, Clin J.Neill, Auerbach Publications (2006)
+
* Refactoring: Improving the Design of Existing Code, Martin Fowler, Kent Beck, John Brant, William Opdyke, don Roberts, Addison-Wesley Professional, 1 edition (July 8, 1999)
+

Latest revision as of 21:50, 20 October 2019

Design Patterns

NeXT Steps

 here everything has yet to be done !
 collecting more design pattern in the catalog
 creating the template page for a design pattern
 creating a card for each


coming soon :

Everything You Always Wanted to Know About Design Patterns... (But Were Afraid to Ask)


See also


Design Patterns Catalog

Gang Of Four Patterns

Several implementation of Above design patterns in C++

Creational Patterns


Structural Patterns


Behavioral Patterns


Concurrency Patterns



Architectural_pattern

Actor Model

Other Patterns

Pattern-Oriented Software Architectures

People


References

Books

  • Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (Nov 10, 1994)
  • Design Pattern Explained, A New Persective on Object-Oriented Design, Alan Shalloway, James Trott, Addison-Wesley, 1st Edition(July 9, 2001), 2nd Edition (October 22, 2004)
  • Professional (July 9, 2001), and second edition
  • Pattern-Oriented Software Architecture, Wiley, Vol 1 - 5
  • Real-Time Design Patterns: Robust Scalable Architecture for Real-Time Systems, Bruce Powel Douglass, Addison Wesley (September 27,2002)
  • Antipatterns, Identification, Refactoring, and Management, Philip A. Laplante, Clin J.Neill, Auerbach Publications (2006)
  • Refactoring: Improving the Design of Existing Code, Martin Fowler, Kent Beck, John Brant, William Opdyke, don Roberts, Addison-Wesley Professional, 1 edition (July 8, 1999)

http://www.eventhelix.com/RealtimeMantra/Patterns/#.VuSjttwrKkA