CSC/ECE 517 Fall 2011/ch4 4h lp: Difference between revisions
Line 69: | Line 69: | ||
====Definition==== | ====Definition==== | ||
"In computer programming, the strategy pattern is a design pattern, whereby algorithms can be selected at runtime. Formally speaking, the strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it." - Wikipedia <ref>[http://en.wikipedia.org/wiki/Strategy_pattern Stratey Pattern Wikipedia]</ref> | "In computer programming, the strategy pattern is a design pattern, whereby algorithms can be selected at runtime. Formally speaking, the strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it." - Wikipedia <ref>[http://en.wikipedia.org/wiki/Strategy_pattern Stratey Pattern Wikipedia]</ref> | ||
====Applications==== | ====Applications==== |
Revision as of 03:51, 21 October 2011
Introduction
This wiki article discusses about some of the commonly used & easy to understand Desgin patterns[1] in the software industry. Specifically, we will be studying about the Singleton, Adapter, Command & Strategy patterns.
Design Pattern
Definition
Examples
Case Study
Singleton
Singleton is a design pattern which imposes a restriction on the class to instantiate exactly one object of that class.
Implementation
- In Java, We can create a thread-safe & lazy version of Singleton as follows. The comments in the code help you understand the Lazy & thread-safe aspect of it.
public class Singleton { private static Singleton instance; private Singleton() { //Do nothing. Initialize the object only when the first time getInstance() is called. } public static synchronized Singleton getInstance() { //The keyword "synchronized" makes it thread safe so that two threads invoking getInstance() //at the same time cannot create two instances when a context switch happens so as to //facilitate this scenario. In general this can happen even with 'n' threads invoking getInstance(). //"synchronized" keyword is used to eliminate such scenarios. if (null == instance) { instance = new Singleton(); } return instance; } }
- In Ruby, we can achieve singleton classes by mixing-in the 'Singleton' module as follows. Here, "SingletonClass" is the name of the singleton class that is being created.
require 'singleton' class SingletonClass include Singleton ... end
When should we use Singleton ? <ref>When should we use Singleton ?</ref>
There is a lot of criticism to the use of singleton pattern. So, how do we decide whether an object should be singleton or not ? For an object to be considered as a singleton object, they must satisfy three requirements:
- controls concurrent access to a shared resource.
- access to the resource will be requested from multiple, disparate parts of the system.
- there can be only one object.
Applications
Advantages
- Singletons are often preferred to global variables as they don't pollute the global namespace with unnecessary variables & also can be instantiated only when needed unlike global variables which always consume resources.
Drawbacks
- Introduces a global state into the application.
- Can make unit testing classes in isolation difficult.
Checkout the this video from Misko Hevery which explains in detail when the usage of singletons is not exercised.<ref>Why Singletons are bad</ref>
Adapter
Command
Strategy
Definition
"In computer programming, the strategy pattern is a design pattern, whereby algorithms can be selected at runtime. Formally speaking, the strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it." - Wikipedia <ref>Stratey Pattern Wikipedia</ref>
Applications
- Sorting a list: where the strategy can be to choose the sorting algorithm itself (QuickSort, HeapSort, etc.) at runtime depending on the input data.
- Layout Managers in UI toolkits: where you can decide at runtime what layout is to be chosen for the GUI to be displayed.<ref>Strategy Pattern Real world examples</ref>
Conclusion
References
<references/>