Designpattern Manual
Designpattern Manual
Designpattern Manual
LAB MANUAL
Prepared By
Prof. Nusrat Anjuum
Assistant Professor
Email: [email protected]
This manual is intended for the Third Year students of Computer Science and Engineering in
the subject of Design Pattern. This manual typically contains practical/Lab Sessions related
to the subject to enhance understanding.
The time spent on getting the design right before you start programming will almost always
save you time in the end. It's much, much easier to make major changes on a design, which is
after all just squiggly lines on paper, and then it is to make changes in hundreds or thousands
of lines of code.
The design process is typically split into distinct phases: Object Oriented Design (OOD) and
Design Pattern.
Students are advised to thoroughly go through this manual rather than only topics mentioned
in the syllabus as practical aspects are the key to understanding and conceptual visualization
of theoretical aspects covered in the books.
1. Make entry in the Log Book as soon as you enter the Laboratory.
2. All the students should sit according to their roll numbers starting from
their left to right.
3. All the students are supposed to enter the terminal number in the log book.
2. Students should be taught for taking the printouts under the observation of
lab teacher.
Subject Incharge
PEO2:-Graduates will be able to create and design computer support systems and
have knowledge and skills to analyze, design, test and implement various software
applications.
PSO2:- Foundation of Computer System: The capability and ability to interpret and
understand the fundamental concepts and methodology of computer systems and
programming. Students can understand the functionality of hardware and software
aspects of computer systems, networks and security.
PSO3:- Foundations of Software development: The ability to grasp the software
development lifecycle and methodologies of software system and project
development.
CO1:
CO3:
Select and apply these patterns in their own designs for simple programs.
CO4:
Create documentation outlining the testable and complete design of a simple
program.
CO5:
Produce and present documents for the purpose of capturing software requirements
and specification.
Index
1 a. Creational Patterns. 01
b. Structural Patterns.
c. Behavioral Patterns.
2 a. Method overriding. 08
b. Interface.
c. Abstract class.
Practical No:1
Aim: Introduction to Design patterns. Describe the organization of catalog along with the
following design patterns.
a. Creational Patterns.
b. Structural Patterns.
c. Behavioral Patterns.
Theory:
Design patterns describe the relations and interactions of different class or objects or types. They
do not specify the final class or types that will be used in any software code, but give an abstract
view of the solution. Patterns show us how to build systems with good object oriented design
qualities by reusing successful designs and architectures. Expressing proven techniques speed up
the development process and make the design patterns, more accessible to developers of new
system.
Good object oriented software design requires considering issues that may not become visible
until later in the implementation. Reusing design patterns helps to prevent subtle issues that can
cause major problems, and it also improves code readability for coders and architects who are
familiar with the patterns and we can also avoid alternatives that compromise reusability.
These patterns are also called as GOF patterns (Gang-Of-Four). Their names are listed in the
table given below.
o Behavioural patterns characterize the ways in which classes and objects interact
and distribute responsibility.
- Scope, which specifies whether the pattern applies primarily to classes or to objects:
o Class patterns deal with relationships between classes and their subclasses. These
relationships are established through inheritance, so they are static.
o Object patterns deal with object relationships, which can be changed at run-time
and are more dynamic.
The following table shows the classification of design patterns. Note, that those are the patterns
introduced by the Gang of Four.
Object
Builder
Prototype Object
Singleton Object
Bridge Object
Composite Object
Decorator Object
Facade Object
Flyweight Object
Proxy Object
Command Object
Interpreter Class
Iterator Object
Mediator Object
Memento Object
Observer Object
State Object
Strategy Object
Visitor Object
Creational patterns
Creational design patterns abstract the instantiation process. They help make a system
independent of how its objects are created, composed, and represented.
A class creational pattern uses inheritance to vary the class that’s instantiated, whereas an object
creational pattern will delegate instantiation to another object.
The creational design patterns allow configuring of a software system as a system with
―product‖ objects that vary widely in structure and functionality. Such configuration can be
static, i.e., specified at compile-time, or dynamic, i.e., specified at run-time.
In software engineering, creational design patterns are design patterns that deal with object
creation mechanisms, trying to create objects in a manner suitable to the situation. The basic
form of object creation could result in design problems or added complexity to the design.
Creational design patterns solve this problem by somehow controlling this object creation.
o Abstract Factory
Creates an instance of several families of classes
o Builder
Separates object construction from its representation
o Factory Method
Creates an instance of several derived classes
o Object Pool
Avoid expensive acquisition and release of resources by recycling objects that are no
longer in use
o Prototype
A fully initialized instance to be copied or cloned
o Singleton
A class of which only a single instance can exist
Structural patterns are concerned with how classes and objects are composed to form larger
structures.
Structural class patterns use inheritance to compose interfaces or implementations. For example,
multiple inheritance can be seen as a kind of structural design patterns, since it uses inheritance
to mix two or more classes into a new one.
Rather than composing interfaces or implementations, structural object patterns describe ways to
compose objects to realize new functionality. The added flexibility of object composition comes
from the ability to change the composition at run-time, which is impossible with static class
composition.
This design patterns is all about Class and Object composition. Structural class-creation
patterns use inheritance to compose interfaces. Structural object-patterns define ways to
compose objects to obtain new functionality.
o Adapter
Match interfaces of different classes
o Bridge
Separates an object’s interface from its implementation
o Composite
A tree structure of simple and composite objects
o Decorator
Add responsibilities to objects dynamically
o Facade
A single class that represents an entire subsystem
o Flyweight
A fine-grained instance used for efficient sharing
o Proxy
An object representing another object
Behavioral patterns are concerned with algorithms and the assignment of responsibility between
objects. Behavioural patterns describe not just patterns of objects or classes but also the patterns
of communication between them. These patterns characterize complex control flow that is
difficult to follow at run-time. They shift your focus away from flow of control to let you
concentrate just on the way objects are interconnected.
Behavioral object patterns use object composition rather than inheritance. For example, a
behavioral object pattern can describe how a group of object might cooperate to perform a task
that no single object can carry out by itself. A typical example is the Observer pattern from the
Smalltalk (Model/View/Controller paradigm). Views are used to show the state of data
(contained in Model) and they are observers of this data. Whenever a model changes its state all
views are notified and they can update the representation of the data in views.
This design patterns is all about Class's objects communication. Behavioral patterns are those
patterns that are most specifically concerned with communication between objects.
o Chain of responsibility
A way of passing a request between a chain of objects
o Command
Encapsulate a command request as an object
o Interpreter
A way to include language elements in a program
o Iterator
Sequentially access the elements of a collection
o Mediator
Defines simplified communication between classes
o Memento
Capture and restore an object's internal state
o Null Object
Designed to act as a default value of an object
o Observer
A way of notifying change to a number of classes
o State
o Strategy
Encapsulates an algorithm inside a class
o Template method
Defer the exact steps of an algorithm to a subclass
o Visitor
Defines a new operation to a class without change
Conclusion:
Thus we, have studied organization of catalog along with all design patterns successfully.
Practical No:2
Aim:
a. Method overriding.
b. Interface.
c. Abstract class.
Theory:
Method Overriding: Declaring a method in sub class which is already present in parent
class is known as method overriding. Overriding is done so that a child class can give its
own implementation to a method which is already provided by the parent class. In this
case the method in parent class is called overridden method and the method in child class
is called overriding method.
Lets take a simple example to understand this. We have two classes: A child class Boy
and a parent class Human. The Boy class extends Human class. Both the classes have a
common method void eat(). Boy class is giving its own implementation to
the eat() method or in other words it is overriding the eat() method.
The purpose of Method Overriding is clear here. Child class wants to give its own
implementation so that when it calls this method, it prints Boy is eating instead of Human
is eating.
Sample Code:
class Human{
//Overridden method
{
System.out.println("Human is eating");
}
}
//Overriding method
}
public static void main( String args[]) {
Boy obj = new Boy();
//This will call the child class version of eat()
obj.eat();
}
}
Output: Boy is eating.
Interface:
The interface in java is a mechanism to achieve abstraction. There can be only abstract
methods in the java interface not method body. It is used to achieve abstraction and multiple
inheritance in Java. It cannot be instantiated just like abstract class.
There are mainly three reasons to use interface. They are given below.
Sample Code:
interface printable{
void print();
obj.print();
Output: Hello
Abstract Class:
Abstraction is a process of hiding the implementation details and showing only functionality to
the user.
Another way, it shows only important things to the user and hides the internal details for
example sending sms, you just type the text and send the message. You don't know the internal
processing about the message delivery.
Abstraction lets you focus on what the object does instead of how it does it.
A class that is declared as abstract is known as abstract class. It needs to be extended and its
method implemented. It cannot be instantiated.
abstract method
A method that is declared as abstract and does not have implementation is known as abstract
method.
Sample Code:
obj.run();
Practical No:3
Theory:
• Defines an interface for creating objects but let sub-classes decide which of those
instantiate.
• Enables the creator to defer Product creation to a sub-class.
• Factory pattern is one of the most used design pattern in Java. This type of design pattern
comes under creational pattern as this pattern provides one of the best ways to create an
object.
• In Factory pattern, we create object without exposing the creation logic to the client and
refer to newly created object using a common interface.
Intent:
Define an interface for creating an object, but let subclasses decide which class to instantiate.
Factory Method lets a class defer instantiation to subclasses.
• Virtual Constructor .
Applicability:
· classes delegate responsibility to one of several helper subclasses, and you want to
localize the knowledge of which helper subclass is the delegate.
CLASS DIAGRAM :
Sample code:
Step 1
Create an interface.
Shape.java
Step 2
Create concrete classes implementing the same interface.
Rectangle.java
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
Square.java
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
Circle.java
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
Step 3
Create a Factory to generate object of concrete class based on given information.
ShapeFactory.java
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
} else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
Step 4
Use the Factory to get object of concrete class by passing an information such as type.
FactoryPatternDemo.java
shape1.draw();
Step 5
Verify the output.
Theory:
• Abstract Factory patterns works around a super-factory which creates other factories.
This factory is also called as Factory of factories. This type of design pattern comes under
creational pattern as this pattern provides one of the best ways to create an object.
Intent:
Provide an interface for creating families of related or dependent objects without specifying
their concrete classes.
Applicability:
· a system should be independent of how its products are created, composed, and represented.
· a family of related product objects is designed to be used together, and you need to enforce this
constraint.
· you want to provide a class library of products, and you want to reveal just their interfaces, not
their implementations.
Class Diagram:
Sample Code:
Step 1
Create an interface for Shapes.
Shape.java
Step 2
Create concrete classes implementing the same interface.
Rectangle.java
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
Square.java
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
Circle.java
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
Step 3
Create an interface for Colors.
Color.java
Step4
Create concrete classes implementing the same interface.
Red.java
@Override
public void fill() {
System.out.println("Inside Red::fill() method.");
}
}
Green.java
Blue.java
@Override
public void fill() {
System.out.println("Inside Blue::fill() method.");
}
}
Step 5
Create an Abstract class to get factories for Color and Shape Objects.
AbstractFactory.java
Step 6
Create Factory classes extending AbstractFactory to generate object of concrete class based on
given information.
ShapeFactory.java
@Override
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
}else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
}else if(shapeType.equalsIgnoreCase("SQUARE")){
return null;
}
@Override
Color getColor(String color) {
return null;
}
}
ColorFactory.java
@Override
public Shape getShape(String shapeType){
return null;
}
@Override
Color getColor(String color) {
if(color == null){
return null;
}
if(color.equalsIgnoreCase("RED")){
return new Red();
}else if(color.equalsIgnoreCase("GREEN")){
return new Green();
}else if(color.equalsIgnoreCase("BLUE")){
return new Blue();
}
return null;
}
}
Step 7
Create a Factory generator/producer class to get factories by passing an information such as
Shape or Color
FactoryProducer.java
if(choice.equalsIgnoreCase("SHAPE")){
return new ShapeFactory();
}else if(choice.equalsIgnoreCase("COLOR")){
return new ColorFactory();
}
return null;
}
}
Step 8
Use the FactoryProducer to get AbstractFactory in order to get factories of concrete classes by
passing an information such as type.
AbstractFactoryPatternDemo.java
Step 9
Verify the output.
Conclusion :
Thus we have executed programs for factory pattern and abstract factory successfully.
Practical No:4
Theory:
• Singleton pattern is one of the simplest design patterns in Java. This type of design
pattern comes under creational pattern as this pattern provides one of the best way to
create an object.
• This pattern involves a single class which is responsible to creates own object while
making sure that only single object get created. This class provides a way to access its
only object which can be accessed directly without need to instantiate the object of the
class. Enables the creator to defer Product creation to a sub-class.
– Private constructor
– Global access
• Intent
Ensure a class has only one instance, and provide a global point of access to it.
Applicability:
• there must be exactly one instance of a class, and it must be accessible to clients from a
well-known access point.
• when the sole instance should be extensible by subclassing, and clients should be able to
use an extended instance without modifying their code.
Class Diagram:
Sample Code:
Step 1
Create a Singleton Class.
SingleObject.java
}
public void showMessage(){
System.out.println("Hello World!");
}
}
Step 2
Get the only object from the singleton class.
SingletonPatternDemo.java
//illegal construct
//Compile Time Error: The constructor SingleObject() is not visible
//SingleObject object = new SingleObject();
Step 3
Verify the output.
Hello World!
Theory:
• Composite pattern is used where we need to treat a group of objects in similar way as a
single object. Composite pattern composes objects in term of a tree structure to represent
part as well as whole hierarchies.
• This type of design pattern comes under structural pattern as this pattern creates a tree
structure of group of objects.
• This pattern creates a class contains group of its own objects. This class provides ways to
modify its group of same objects.
• We are demonstrating use of Composite pattern via following example in which show
employees hierarchy of an organization.
• Intent
• Applicability
• you want clients to be able to ignore the difference between compositions of objects and
individual objects. Clients will treat all objects in the composite structure uniformly.
Class Diagram:
Sample Code:
Step 1
Create Employee class having list of Employee objects.
Employee.java
import java.util.ArrayList;
import java.util.List;
// constructor
public Employee(String name,String dept, int sal) {
this.name = name;
this.dept = dept;
this.salary = sal;
subordinates = new ArrayList<Employee>();
}
Step 2
Use the Employee class to create and print employee hierarchy.
CompositePatternDemo.java
CEO.add(headSales);
CEO.add(headMarketing);
headSales.add(salesExecutive1);
headSales.add(salesExecutive2);
headMarketing.add(clerk1);
headMarketing.add(clerk2);
Step 3
Verify the output.
Conclusion:
Practical No:5
Theory:
Decorator pattern allows a user to add new functionality to an existing object without altering its
structure. This type of design pattern comes under structural pattern as this pattern acts as a
wrapper to existing class. This pattern creates a decorator class which wraps the original class
and provides additional functionality keeping class methods signature intact.
Intent
Also Known As
Wrapper
Applicability
Use Decorator
Class Diagram:
Sample Code:
Step 1
Create an interface.
Shape.java
Step 2
Create concrete classes implementing the same interface.
Rectangle.java
@Override
Circle.java
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
Step 3
Create abstract decorator class implementing the Shape interface.
ShapeDecorator.java
Step 4
Create concrete decorator class extending the ShapeDecorator class.
RedShapeDecorator.java
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
Step 5
Use the RedShapeDecorator to decorate Shape objects.
DecoratorPatternDemo.java
Step 6
Verify the output.
Shape: Circle
Shape: Circle
Shape: Rectangle
Theory:
• In Proxy pattern, a class represents functionality of another class. This type of design
pattern comes under structural pattern.
• In Proxy pattern, we create object having original object to interface its functionality to
outer world
• Intent
• Also Known As
• Surrogate
Applicability:
Class Diagram:
Sample Code:
Step 1
Create an interface.
Image.java
Step 2
Create concrete classes implementing the same interface.
RealImage.java
@Override
public void display() {
System.out.println("Displaying " + fileName);
}
ProxyImage.java
@Override
public void display() {
if(realImage == null){
realImage = new RealImage(fileName);
}
realImage.display();
}
}
Step 3
Use the ProxyImage to get object of RealImage class when required.
ProxyPatternDemo.java
Step 4
Verify the output.
Loading test_10mb.jpg
Displaying test_10mb.jpg
Displaying test_10mb.jpg
Conclusion :
Practical No:6
Theory:
As the name suggests, the chain of responsibility pattern creates a chain of receiver objects for a
request. This pattern decouples sender and receiver of a request based on type of request. This
pattern comes under behavioral patterns.
In this pattern, normally each receiver contains reference to another receiver. If one object cannot
handle the request then it passes the same to the next receiver and so on.
Intent
Avoid coupling the sender of a request to its receiver by giving more than one
object a chance to handle the request. Chain the receiving objects and pass the
Applicability
more than one object may handle a request, and the handler isn't known a priori. The
handler should be ascertained automatically.
the set of objects that can handle a request should be specified dynamically.
Class Diagram:
Sample Code:
Step 1
Create an abstract logger class.
AbstractLogger.java
Step 2
Create concrete classes extending the logger.
ConsoleLogger.java
@Override
protected void write(String message) {
System.out.println("Standard Console::Logger: " + message);
}
}
ErrorLogger.java
@Override
protected void write(String message) {
System.out.println("Error Console::Logger: " + message);
}
}
FileLogger.java
@Override
protected void write(String message) {
System.out.println("File::Logger: " + message);
}
}
Step 3
Create different types of loggers. Assign them error levels and set next logger in each logger.
Next logger in each logger represents the part of the chain.
ChainPatternDemo.java
errorLogger.setNextLogger(fileLogger);
fileLogger.setNextLogger(consoleLogger);
return errorLogger;
}
loggerChain.logMessage(AbstractLogger.INFO,
"This is an information.");
loggerChain.logMessage(AbstractLogger.DEBUG,
"This is an debug level information.");
loggerChain.logMessage(AbstractLogger.ERROR,
"This is an error information.");
}
}
Step 4
Verify the output.
Theory:
• Intent
Define an object that encapsulates how a set of objects interact. Mediator promotes loose
coupling by keeping objects from referring to each other explicitly, and it lets you vary
their interaction independently.
• Applicability
Class Diagram:
Sample Code:
Step 1
Create mediator class.
ChatRoom.java
import java.util.Date;
public class ChatRoom {
public static void showMessage(User user, String message){
System.out.println(new Date().toString() + " [" + user.getName() + "] : " + message);
}
}
Step 2
Create user class
User.java
Step 3
Use the User object to show communications between them.
MediatorPatternDemo.java
Step 4
Verify the output.
Conclusion:
Thus, we have executed programs for chain of responsibility and mediator pattern
successfully.
Practical No:7
Theory:
Iterator pattern is very commonly used design pattern in Java and .Net programming
environment. This pattern is used to get a way to access the elements of a collection object in
sequential manner without any need to know its underlying representation.
Intent
Provide a way to access the elements of an aggregate object sequentially without exposing its
underlying representation.
Also Known As
Cursor
Applicability
to provide a uniform interface for traversing different aggregate structures (that is, to
support polymorphic iteration).
Class Diagram:
Sample Code:
Step 1
Create interfaces.
Iterator.java
Container.java
Step 2
Create concrete class implementing the Container interface. This class has inner
class NameIterator implementing the Iterator interface.
NameRepository.java
@Override
int index;
@Override
return true;
return false;
@Override
if(this.hasNext()){
return names[index++];
return null;
Step 3
Use the NameRepository to get iterator and print names.
IteratorPatternDemo.java
Step 4
Verify the output.
Name : Robert
Name : John
Name : Julie
Name : Lora
Practical No:8
In Visitor pattern, we use a visitor class which changes the executing algorithm of an element
class. By this way, execution algorithm of element can vary as and when visitor varies. This
pattern comes under behavior pattern category. As per the pattern, element object has to accept
the visitor object so that visitor object handles the operation on the element object.
Intent
Represent an operation to be performed on the elements of an object structure. Visitor lets you
define a new operation without changing the classes of the elements on which it operates.
Applicability
an object structure contains many classes of objects with differing interfaces, and you
want to perform operations on these objects that depend
an object structure, and you want to avoid "polluting" their classes with these operations. Visitor
lets you keep related operations together by defining them in one class. When the object structure
is shared by many applications, use Visitor to put operations in just those applications that need
them.
the classes defining the object structure rarely change, but you often want
to define new operations over the structure. Changing the object structure classes requires
redefining the interface to all visitors, which is potentially costly. If the object structure classes
change often, then it's probably better to define the operations in those classes.
Class Diagram:
Sample Code:
Step 1
Define an interface to represent element.
ComputerPart.java
Step 2
Create concrete classes extending the above class.
Keyboard.java
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Monitor.java
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Mouse.java
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Computer.java
ComputerPart[] parts;
public Computer(){
parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};
}
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
for (int i = 0; i < parts.length; i++) {
parts[i].accept(computerPartVisitor);
}
computerPartVisitor.visit(this);
}
}
Step 3
Define an interface to represent visitor.
ComputerPartVisitor.java
Step 4
Create concrete visitor implementing the above class.
ComputerPartDisplayVisitor.java
@Override
public void visit(Computer computer) {
System.out.println("Displaying Computer.");
}
@Override
public void visit(Mouse mouse) {
System.out.println("Displaying Mouse.");
}
@Override
public void visit(Keyboard keyboard) {
System.out.println("Displaying Keyboard.");
}
@Override
public void visit(Monitor monitor) {
System.out.println("Displaying Monitor.");
}
}
Step 5
Use the ComputerPartDisplayVisitor to display parts of Computer.
VisitorPatternDemo.java
}
}
Step 6
Verify the output.
Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.
Conclusion:
Practical No:9
Theory:
The IT Environment With over 50,000 physical servers, a growing private cloud environment
(VMware vSphere, Microsoft HyperV, IBM PowerVM), and hundreds of storage arrays (EMC
Symmetrix, HDS, netApp), managing IT operations at this large bank is no small feat. More than
1,600 IT engineers in over a dozen datacenters worldwide work closely with 3rd party partners
and vendors to meet the bank’s service availability goals.
Challenges:
With millions of customers accessing the bank systems daily at ATMs, branches, online, and
through multiple call centers, any downtime or service disruptions are practically unacceptable to
the bank. With a growing portion of customers relying on online and mobile banking, 24/7
service reliability has become more critical than ever. To address these needs, major efforts and
resources have been directed towards the creation of a robust high availability and disaster
recovery infrastructure. In this complex infrastructure comprising multiple datacenters,
configuration changes are undertaken daily by different groups in various parts of the
environment. While each team was making an effort to apply best practices in its own domain,
there was no visibility to the implications and risks introduced by such modifications on the
overall stability, service availability, and DR readiness of critical systems. As the IT environment
has grown in size and complexity, keeping production high availability and disaster recovery
systems in complete sync across IT teams and domains (e.g., server, storage, databases and
virtualization) has become an increasing challenge. Moreover, management was lacking
visibility into how well the organization was keeping up with established Service Level
Agreements (SLA’s) for availability (RTO), data protection (RPO), and retention objectives.
In Search of a Solution:
While overall service performance of the bank has been satisfactory, minor incidents over a
several month period have alerted the bank’s IT stewards to hidden vulnerabilities and the lack
of visibility to impending downtime and data loss risks. Although the bank managed to escape
these incidents without a major service impact, other banks were not so lucky. Publicized
outages at major financial institutions around the world caught the attention of senior
management. They were determined to avoid seeing their bank suffer similar embarrassment and
dire financial consequences. Following management’s directive, a committee was put in place to
define the requirements for a solution: Proactively detect risks introduced by configuration
changes across the entire datacenter and DR environments Analyze the potential impact of
such risks on service availability levels and disaster recovery readiness Help the relevant
teams pinpoint the source of each risk identified Provide management with a consolidated
view of downtime and data loss risks across the entire environment Measure adherence to
availability and data recovery SLA’s (RPO, RTO, redundancy, DR capacity) Simplify internal
and regulatory compliance reporting Improve DR capacity management and planning In
addition, the IT team mandated the solution must operate in a nonintrusive manner (preferably
agentless) and integrate with the service management system used by the organization.
Results :
Since the bank has implemented the AvailabilityGuard solution, downtime and data loss risks
have decreased by over 70%. AvailabilityGuard has also been helping the bank break down
many of the long-standing IT silos. AvailabilityGuard provides a unified platform that detects
availability risks across all IT domains, enabling collaboration among the various teams. And
since most issues are identified and resolved before they impact service availability, there is a
50% decrease in time spent on resolving emergency issues. With AvailabilityGuard well-
integrated into the bank’s IT infrastructure and processes, planning for the next phase of
implementation is underway, expanding the coverage of AvailabilityGuard to include all
production and DR systems.
Conclusion:
Thus ,we have studied Methods to analyze the complexity of design patterns.