Difference between revisions of "DesignPatterns"

From Lost In Wonderlands
Jump to: navigation, search
(Created page with "= Design Patterns = ''by paul.plaquette, Senior Software Engineer, Trilda Open Source'' '''NeXT Steps''' ''here everything has yet to be done !'' collecting more design...")
 
(See also)
 
(39 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 15: Line 13:
 
''coming soon'' :  
 
''coming soon'' :  
  
'''''Everything You Always Wanted to Know About Design Patterns... (But Were Afraid to Ask)''''' B)
+
'''''Everything You Always Wanted to Know About Design Patterns... (But Were Afraid to Ask)'''''
  
  
 
== See also ==
 
== See also ==
 
+
* [https://en.wikipedia.org/wiki/Index_of_object-oriented_programming_articles Index_of_object-oriented_programming_articles]
 +
* [[SoftwareArchitecture]]
 +
* [[DesignPatterns]]
 
* [[AntiPatterns]]
 
* [[AntiPatterns]]
 
* [[Refactoring]]
 
* [[Refactoring]]
 +
* [[CleanCode]]
 +
* [[SecureCode]]
 +
* [[UML]]
 +
* [[SOLID]]
 +
* [[Packages Principle]]
 +
* [[KISS]]
 +
* [[DRY]]
 +
* [[GRASP]]
 +
* [[YAGNI]]
  
 +
 +
* [[Main_Page]]
  
 
== 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