Design Pattern Interview Questions Part 1
Design Pattern Interview Questions Part 1
6/28/11 9:48 PM
ARTICLES FORUMS FAQS GROUPS TRAINING $1500 FORUM CONTEST FREE STUFF FREE ICONS ABOUT US HALL OF FAME LOGIN SILVERLIGHT / WPF WCF LINQ SQL SERVER IIS VB 6.0 EXCEL WORD POWERPOINT SHAREPOINT WINDOWS 7 WINDOWS SERVER
On demand individual file defragmentation option! Speed up system boot time with the most extensive boot time defragmentation available.
Introduction
Hi friends , Please do not think you get an architecture position by reading interview questions. But yes there should be some kind of reference which will help you quickly revise what are the definition. Just by reading these answers you get to a position where you are aware of the fundamentals. But if you have not really worked you will surely fail with scenario based questions. So use this as a quick revision rather than a shot cut. To give you a practical understanding i have put all these design patterns in a video format and uploaded on http://www.questpond.com/FreeDesign1.htm . You can visit http://www.questpond.com and download the complete architecture interview questions PDF which covers SOA , UML , Design patterns , Togaf , OOPs etc. I am trying to get familiar with the egghead cafe editor so i am uploading questions one by one. Please cope up with me.
Note: - The best way to remember Creational pattern is by ABFPS (Abraham Became First President of States). Structural Patterns
Adapter:-Match interfaces of different classes. Bridge:-Separates an objects abstraction from its implementation. Composite:-A tree structure of simple and composite objects. Decorator:-Add responsibilities to objects dynamically. Faade:-A single class that represents an entire subsystem. Flyweight:-A fine-grained instance used for efficient sharing. Proxy:-An object representing another object.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 1 of 15
6/28/11 9:48 PM
Note: - Just remember Music....... 2 MICS On TV (MMIICCSSOTV). Note :- In the further section we will be covering all the above design patterns in a more detail manner.
Taking these issues as our base we will now look in to how factory pattern can help us solve the same. Below figure Factory Pattern shows two concrete classes ClsInvoiceWithHeader and ClsInvoiceWithOutHeader. The first issue was that these classes are in direct contact with client which leads to lot of new keyword scattered in the client code. This is removed by introducing a new class ClsFactoryInvoice which does all the creation of objects. The second issue was that the client code is aware of both the concrete classes i.e. ClsInvoiceWithHeader and ClsInvoiceWithOutHeader. This leads to recompiling of the client code when we add new invoice types. For instance if we add ClsInvoiceWithFooter client code needs to be changed and recompiled accordingly. To remove this issue we have introduced a common interface IInvoice. Both the concrete classes ClsInvoiceWithHeader and ClsInvoiceWithOutHeader inherit and implement the IInvoice interface. The client references only the IInvoice interface which results in zero connection between client and the concrete classes ( ClsInvoiceWithHeader and ClsInvoiceWithOutHeader). So now if we add new concrete invoice class we do not need to change any thing at the client side. In one line the creation of objects is taken care by ClsFactoryInvoice and the client disconnection from the concrete classes is taken care by IInvoice interface.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 2 of 15
6/28/11 9:48 PM
Figure :- Interface and concrete classes We have also introduced an extra class ClsFactoryInvoice with a function getInvoice() which will generate objects of both the invoices depending on intInvoiceType value. In short we have centralized the logic of object creation in the ClsFactoryInvoice. The client calls the getInvoice function to generate the invoice classes. One of the most important points to be noted is that client only refers to IInvoice type and the factory class ClsFactoryInvoice also gives the same type of reference. This helps the client to be complete detached from the concrete classes, so now when we add new classes and invoice types we do not need to recompile the client.
Note :- The above example is given in C# . Even if you are from some other technology you can still map the concept accordingly. You can get source code from the CD in FactoryPattern folder.
Now that we know the basic lets try to understand the details of how abstract factory patterns are actually implemented. As said previously we have the factory pattern classes (factory1 and factory2) tied up to a common abstract factory (AbstractFactory Interface) via inheritance. Factory classes stand on the top of concrete classes which are again derived from common interface. For instance in figure Implementation of abstract factory both
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 3 of 15
6/28/11 9:48 PM
Figure: - Implementation of abstract factory Now lets have a look at how we can practically implement abstract factory in actual code. We have scenario where we have UI creational activities for textboxes and buttons through their own centralized factory classes ClsFactoryButton and ClsFactoryText. Both these classes inherit from common interface InterfaceRender. Both the factories ClsFactoryButton and ClsFactoryText inherits from the common factory ClsAbstractFactory. Figure Example for AbstractFactory shows how these classes are arranged and the client code for the same. One of the important points to be noted about the client code is that it does not interact with the concrete classes. For object creation it uses the abstract factory ( ClsAbstractFactory ) and for calling the concrete class implementation it calls the methods via the interface InterfaceRender. So the ClsAbstractFactory class provides a common interface for both factories ClsFactoryButton and ClsFactoryText.
Note: - We have provided a code sample in C# in the AbstractFactory folder. People who are from different technology can compare easily the implementation in their own language.
We will just run through the sample code for abstract factory. Below code snippet Abstract factory and factory code snippet shows how the factory pattern classes inherit from abstract factory.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 4 of 15
6/28/11 9:48 PM
Figure: - Abstract factory and factory code snippet Figure Common Interface for concrete classes how the concrete classes inherits from a common interface InterFaceRender which enforces the method render in all the concrete classes.
Figure: - Common interface for concrete classes The final thing is the client code which uses the interface InterfaceRender and abstract factory ClsAbstractFactory to call and create the objects. One of the important points about the code is that it is completely isolated from the concrete classes. Due to this any changes in concrete classes like adding and removing concrete classes does not need client level changes.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 5 of 15
6/28/11 9:48 PM
Figure: - Builder concept To understand what we mean by construction and representation lets take the example of the below Tea preparation sequence. You can see from the figure Tea preparation from the same preparation steps we can get three representation of teas (i.e. Tea with out sugar, tea with sugar / milk and tea with out milk).
Figure: - Tea preparation Now lets take a real time example in software world to see how builder can separate the complex creation and its representation. Consider we have application where we need the same report to be displayed in either PDF or EXCEL format. Figure Request a report shows the series of steps to achieve the same. Depending on report type a new report is created, report type is set, headers and footers of the report are set and finally we get the report for display.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 6 of 15
6/28/11 9:48 PM
We will take the same report problem and try to solve the same using builder patterns. There are three main parts when you want to implement builder patterns. Builder: - Builder is responsible for defining the construction process for individual parts. Builder has those individual processes to initialize and configure the product. Director: - Director takes those individual processes from the builder and defines the sequence to build the product. Product: - Product is the final object which is produced from the builder and director coordination. First lets have a look at the builder class hierarchy. We have a abstract class called as ReportBuilder from which custom builders like ReportPDF builder and ReportEXCEL builder will be built.
Figure Builder classes in actual code shows the methods of the classes. To generate report we need to first Create a new report, set the report type (to EXCEL or PDF) , set report headers , set the report footers and finally get the report. We have defined two custom builders one for PDF (ReportPDF) and other for EXCEL (ReportExcel). These two custom builders define there own process according to the report type.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 7 of 15
6/28/11 9:48 PM
Figure: - Builder classes in actual code Now lets understand how director will work. Class clsDirector takes the builder and calls the individual method process in a sequential manner. So director is like a driver who takes all the individual processes and calls them in sequential manner to generate the final product, which is the report in this case. Figure Director in action shows how the method MakeReport calls the individual process to generate the report product by PDF or EXCEL.
The third component in the builder is the product which is nothing but the report class in this case.
Now lets take a top view of the builder project. Figure Client,builder,director and product shows how they work to achieve the builder pattern. Client creates the object of the director class and passes the appropriate builder to initialize the product. Depending on the builder the product is initialized/created and finally sent to the client.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 8 of 15
6/28/11 9:48 PM
The output is something like this. We can see two report types displayed with their headers according to the builder.
Prototype pattern falls in the section of creational pattern. It gives us a way to create new objects from the existing instance of the object. In one
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84d2ern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 9 of 15
6/28/11 9:48 PM
Figure :- BYREf
The conclusion of the above example is that objects when set to other objects are set BYREF. So changing new object values also changes the old object value. There are many instances when we want the new copy object changes should not affect the old object. The answer to this is prototype patterns. Lets look how we can achieve the same using C#. In the below figure Prototype in action we have the customer class ClsCustomer which needs to be cloned. This can be achieved in C# my using the MemberWiseClone method. In JAVA we have the Clone method to achieve the same. In the same code we have also shown the client code. We have created two objects of the customer class obj1 and obj2. Any changes to obj2 will not affect obj1 as its a complete cloned copy.
Note :- You can get the above sample in the CD in Prototype folder. In C# we use the MemberWiseClone function while in JAVA we have the Clone function to achieve the same.
(A) Can you explain shallow copy and deep copy in prototype patterns?
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84dern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 10 of 15
6/28/11 9:48 PM
There are two types of cloning for prototype patterns. One is the shallow cloning which you have just read in the first question. In shallow copy only that object is cloned, any objects containing in that object is not cloned. For instance consider the figure Deep cloning in action we have a customer class and we have an address class aggregated inside the customer class. MemberWiseClone will only clone the customer class ClsCustomer but not the ClsAddress class. So we added the MemberWiseClone function in the address class also. Now when we call the getClone function we call the parent cloning function and also the child cloning function, which leads to cloning of the complete object. When the parent objects are cloned with their containing objects its called as deep cloning and when only the parent is clones its termed as shallow cloning.
There are situations in a project where we want only one instance of the object to be created and shared between the clients. No client can create an instance of the object from outside. There is only one instance of the class which is shared across the clients. Below are the steps to make a singleton pattern:1) Define the constructor as private. 2) Define the instances and methods as static. Below is a code snippet of a singleton in C#. We have defined the constructor as private, defined all the instance and methods using the static keyword as shown in the below code snippet figure Singleton in action. The static keyword ensures that you only one instance of the object is created and you can all the methods of the class with out creating the object. As we have made the constructor private, we need to call the class directly.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84dern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 11 of 15
6/28/11 9:48 PM
Note :- In JAVA to create singleton classes we use the STATIC keyword , so its same as in C#. You can get a sample C# code for singleton in the singleton folder.
Command pattern moves the above action in to objects. These objects when executed actually execute the command. As said previously every command is an object. We first prepare individual classes for every action i.e. exit, open, file and print. Al l the above actions are wrapped in to classes like Exit action is wrapped in clsExecuteExit , open action is wrapped in clsExecuteOpen, print action is wrapped in clsExecutePrint and so on. All these classes are inherited from a common interface IExecute.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84dern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 12 of 15
6/28/11 9:48 PM
Using all the action classes we can now make the invoker. The main work of invoker is to map the action with the classes which have the action. So we have added all the actions in one collection i.e. the arraylist. We have exposed a method getCommand which takes a string and gives back the abstract object IExecute. The client code is now neat and clean. All the IF conditions are now moved to the clsInvoker class.
Note: - You can find a sample code for C# code in command pattern in Command folder.
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84dern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 13 of 15
6/28/11 9:48 PM
Design Patterns
Anonymous anonymous replied to Shivprasad Koirala at Monday, August 11, 2008 12:49 AM
Good Effort! I would recommend "Head First - Design Patterns" a must read.
Interviews World replied to Anonymous anonymous at Wednesday, October 01, 2008 8:20 AM
Hi Can you please provide full code of your given example. Thanks www.interviewsworld.com
Related Items
Design Patterns for . NET
By Douglas Minnaar Printer Friendly Version View My Articles 33184 Views Picture It is not the intent of the Design Pattern Series to focus on providing a theoretical knowledge dump of all there is to know about design patterns. There are design patterns. I use the theory of design patterns mostly as a guide and instead make references to good design pattern books for more detail explanation. Design Patterns Article 1 Author : Douglas Minnaar Level : Novice Intermediate Prerequisites : Understanding of Object Oriented of C#. NET code is required Please download the code here Summary It is not the intent of the Design Pattern Series to focus on providing a theoretical knowledge dump of all there is to know about design patterns. There are design patterns. I use the theory of design patterns mostly as a guide and instead make references to good design pattern books for more detail explanation. Think of this series as a Design Patterns by example series. The target audience is
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84dern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 14 of 15
6/28/11 9:48 PM
SQL Server and . NET Interview questions free download in SQL Server DTS
Twist :- What's difference between Association , Aggregation and Inheritance relationships?) How can we acheive inheritance in VB. NET ? What are abstract classes ? What's a Interface ? What is difference between abstract classes and interfaces? What is a delegate ? What are event's ? Do events have return type ? Can event's have message from ASP. NET ? What are different IIS isolation levels? . NET Architecture What are design patterns ? What's difference between Factory and Abstract Factory Pattern's? What's MVC pattern? (Twist: - How can you implement MVC pattern in ASP. NET? ) How can we
SQL Server and . NET Interview questions free download in SQL Server Programming
Twist :- What's difference between Association , Aggregation and Inheritance relationships?) How can we acheive inheritance in VB. NET ? What are abstract classes ? What's a Interface ? What is difference between abstract classes and interfaces? What is a delegate ? What are event's ? Do events have return type ? Can event's have message from ASP. NET ? What are different IIS isolation levels? . NET Architecture What are design patterns ? What's difference between Factory and Abstract Factory Pattern's? What's MVC pattern? (Twist: - How can you implement MVC pattern in ASP. NET? ) How can we
http://www.eggheadcafe.com/tutorials/aspnet/280ee727-00a7-497a-84dern-interview-questions-part-1.aspx#Other_Interview_question_PDFs_
Page 15 of 15