Uploaded by Amayuru Upanith

EG 2020 3817 (1)

advertisement
Q2)
a) What is the Proxy Design Pattern?
In Proxy Design Pattern It is involving to create a representative object or a proxy that
will manage the access to another object or the target object. This object can be remote,
expensive to instantiate, or it should be in need of securing or controlling access.
b) What are the key components of the Proxy Design Pattern?
• Proxy- From this Proxy client will interact with it. Also this Proxy will maintains
a control access and the reference to the real object.
• Real Subject (or Target Object)- This is the object to which access is being
controlled by the proxy. Real object is the object that Proxy will control the access
to this object.
• Interface- From the interface both the proxy and the real object will be having the
same methods. From this interface proxy can be act as a substitute for the real
object.
c) Can you explain the different types of proxies in the Proxy Design Pattern?
• Remote Proxy- From this Remote Proxy can be used to control the access of the
remote objects. Remote Proxy will acts as a local representation of the remote
object and it will handles communication with it also by providing a local
interface.
• Virtual Proxy- From the Virtual Proxy it will create a placeholder object that will
stand for expensive objects. From these placeholders they will load the real
objects when it is necessary and also it conserved the resources as well.
• Protection Proxy- From this Protection Proxy it will control access rights to the
real object.From this Protection Proxy it will verify the clients who have the
necessary permissions before accessing the real object.
• Smart (Caching) Proxy- From this proxy it will caches the results of
operations.From this technique proxy will return the cached results.Beacuse of
that executing the operation on the real object if the same request made again ,can
be avoid.
d) How does the Proxy Design Pattern contribute to the overall software design?
• Security- From the Proxy Design Pattern it will control the access to sensitive
date of the real object.Beacause of that it will enhance the security as well.
• Efficiency- By using Virtual Proxy it can be help in lazy loading.This will
improve the efficiency of the design as well.
• Abstraction- By using Proxy it will cover the complexity of the real object.From
that it will give you a simple interface.
• Enhanced Functionality- Proxies can add important functionalities like logging,
caching,access control without disturbing the real object's code.From this it will
contribute to flexibility and extensibility in the design.
4.
a. Explain the Adapter Pattern and provide an example?
The Adapter Pattern is a structural design pattern From this Adapter Design Pattern it will allow
to incompatible interfaces to work together. From this Adapter Design Pattern it will acts as a
bridge between two incompatible interfaces.From this design pattern it will convert the interface
of one class into another interface that clients expect.Also from this Adapter Design Pattern will
enable work together in different interfaces
Example: Consider a system that will provide data in XML format.XML format is used in old
systems.But in a new system it will only accept the JSON format only.From the help of Adapter
Design Pattern we convert XML data format into JSON data format.
b. Provide a sample implementation on of the Adapter Pattern.
interface OldSystem {
String provide_XML_data();
}
interface NewSystem {
String provide_JSON_data();
}
class Adapter implements NewSystem {
private final OldSystem oldSystem;
public Adapter(OldSystem oldSystem) {
this.oldSystem = oldSystem;
}
@Override
public String provide_JSON_data() {
String xmlData = oldSystem.provide_XML_data();
String jsonData = convert_XML_to_JSON(xmlData);
return jsonData;
}
private String convert_XML_to_JSON(String xmlData) {
// This method should perform the actual conversion
return "{\"JSON\": \"Converted data from XML\"}";
}
}
class LegacySystem implements OldSystem {
@Override
public String provide_XML_data() {
// Simulated method providing XML data
return "<data>Some XML data</data>";
}
}
public class Client {
public static void client_code(NewSystem system) {
String jsonData = system.provide_JSON_data();
System.out.println("Received JSON data: " + jsonData);
}
public static void main(String[] args) {
// Usage:
LegacySystem legacySystem = new LegacySystem();
Adapter adapter = new Adapter(legacySystem);
client_code(adapter);
}
}
c. Provide a class diagram for the Adapter Pattern.
1)
a)Explain the concept of the Singleton Pattern and how it addresses the requirement for a single
instance of a class.
From the Singleton Pattern ensures that a class has only one instance and gives a global point of
access to that instance. In the context of a library management application is required a single
database connection manager throughout the entire application, the Singleton Pattern is highly
relevant to this.
Concept of the Singleton Pattern and Addressing the Requirement:
•
Singleton Pattern: It provides a class that is responsible for instantiating itself and
providing access to its only a single instance.
•
Ensuring a Single Instance: The Singleton Pattern achieves this by restricting the
creation of the class to a single object and providing a way to access that object can
access globally.
b) Provide a sample implementation of the Singleton Pattern in the context of the library
management system. Include relevant code snippets and explain how your implementation
ensures a single instance of the database connection manager.
public class DatabaseConnectionManager {
private static DatabaseConnectionManager _instance;
private DatabaseConnectionManager() {
throw new IllegalStateException("Use get_instance() method to get the instance");
}
public static DatabaseConnectionManager get_instance() {
if (_instance == null) {
_instance = _create_instance();
}
return _instance;
}
private static DatabaseConnectionManager _create_instance() {
System.out.println("Initializing database connection...");
return new DatabaseConnectionManager();
}
public static void main(String[] args) {
DatabaseConnectionManager dbManagerInstance1 =
DatabaseConnectionManager.get_instance();
DatabaseConnectionManager dbManagerInstance2 =
DatabaseConnectionManager.get_instance();
System.out.println(dbManagerInstance1 == dbManagerInstance2); // Output: true
}
}
•
The DatabaseConnectionManager class has a private constructor to prevent direct
instantiation of the class.
•
The get_instance() method checks if an instance exists. If not, it creates a new instance
and returns it. Otherwise, it returns the existing instance.
•
The usage demonstrates that calling get_instance() multiple times returns the same
instance of the DatabaseConnectionManager.
c) Discuss the potential advantages and disadvantages of using the Singleton Pa6ern in this
scenario. Include considerations related to thread safety, lazy initialization, and any impact on
unit testing.
Advantages:
1. Single Instance: Guarantees a single instance throughout the application's lifetime.
2. Global Access: Provides a global point of access to the instance, ensuring centralized
management of database connections.
3. Resource Efficiency: Helps in avoiding unnecessary re-initialization of the database
connection.
Disadvantages:
1. Thread Safety: It might require additional implementation for thread safety, especially in
multi-threaded environments, to prevent race conditions while initializing the instance.
2. Lazy Initialization: Depending on the implementation, lazy initialization might impact
performance if the initialization process is resource-intensive.
3. Impact on Unit Testing: Singleton classes can sometimes be difficult to unit test due to
their global state, making it challenging to isolate dependencies for testing.
Download