Design Pattern
Contents:
Types of Design Patterns
- Creational Patterns
- hide creation logic
- Structural Patterns
- class and object composition
- Behavioral Patterns
- communication between objects
- J2EE Patterns
Factory Pattern
- create an interface
public interface Shape{
void draw();
}
- create concrete classes
public class Rectangle implements Shape{
@Override
public void draw(){
System.out.println("Inside Rectangle");
}
}
public class Circle implements Shape{
@Override
public void draw(){
System.out.println("Inside Circle");
}
}
- create factory to generate concrete classes
public class ShapeFactory{
public Shape getShape(String type){
if(type == null){
return null;
}
if(shape.equalsIgnoreCase("Rectangle")){
return new Rectangle();
}
if(shape.equalsIgnoreCase("Circle")){
return new Circle();
}
return null
}
}
- demo
public class Demo{
ShapeFactory factory = new ShapeFactory();
Shape circle = factory.getShape("Circle");
circle.draw();
Shape rectangle = factory.getShape("Rectangle");
rectangle.draw();
}
Singleton Pattern
- create singleton class
public class SingleObject{
private static SingleObject ins = new SingleObject();
private SingleObject(){}
public static SingleObject getInstance(){
return ins;
}
public void show(){
System.out.println("Hello");
}
}
- demo
public class Demo{
public static void main(String[] args){
SingleObject obj = SingleObject.getInstance();
obj.show();
}
}
MVC Pattern
Model-View-Controller
- Model: represent object, can have logic to update controller if its data changes
- View: represent visualization of data from Model
- Controller: act on Model and View, control data flow into Model and update View when data changes
Structure
- app: models, views, controllers
- config: global server configurations
- lib: assorted libraries
Procedure
- server routes the request to certain controller
- controller interprets the request, load reqested information from models
- controller passes information from model to view
- final view is sent to user
Model
public class Student{
private String id;
private String name;
public String getId(){
return id;
}
public String getName(){
return name;
}
public void setId(String id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
}
- View
public class StudentView{
public void printInfo(String studentName, String studentId){
System.out.println("Student: " + studentName);
System.out.println("Student ID: " + studentId);
}
}
- Controller
public class StudentController{
private Student model;
private StudentView view;
public StudentController(Student model, StudentView view){
this.model = model;
this.view = view;
}
public void setStudentName(String name){
model.setName(name);
}
public void setStudentId(String id){
model.setId(id);
}
public String getStudentName(){
return model.getName();
}
public String getStudentId(){
return model.getId();
}
public void updateView(){
view.printInfo(model.getName(), model.getId());
}
}
- Demo
public class Demo{
public static void main(String[] args){
Student model = getStudentFromDatabase();
StudentView view = new StudentView();
StudentController controller = new StudentController(model,view);
controller.updateView();
controller.setStudentName("Other name");
controller.updateView();
}
}