Bài tập lớn KIẾN TRÚC VÀ THIẾT KẾ PHẦN MỀM Creational Design Patterns - Pdf 26

HỌC VIÊN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
***
KIẾN TRÚC VÀ THIẾT KẾ PHẦN MỀM
Sinh viên thực hiện: Bùi Thị Thủy
Lớp: D10CNPM2 Hà Nội,Ngày 22/2/2014
I.Creational Design Patterns:
1. Singleton
Ý Nghĩa : “Đảm bảo rằng một lớp chỉ có duy nhất một thể hiện và cung cấp một biến toàn cục để
truy cập nó”Singleton pattern được sử dụng khi chúng ta phải đảm bảo rằng chỉ có một thể hiện
của một lớp được tạo ra và các thể hiện phải có sẵn và thông qua tất cả các mã. Một diểm đặc
biệt cần chú ý là pattern này được thực hiện trong môi trường đa luồng để multible phải truy cập
vào các nguồn tài nguyên của cùng các đối tượng singleton .
Tình huống sử dụng :
- Các lớp Logger
- Các lớp Configuration
- Chế độ chia sẻ tài nguyên
Sử dụng mẫu Singleton khi bạn muốn hạn chế việc sử dụng tài nguyên (thay vì việc tạo không
hạn chế số lượng đối tượng) hoặc khi bạn cần phải xử lý một đối tượng nhạy cảm, mà dữ liệu
của nó không thể chia sẻ cho mọi thể hiện, như registry của Windows.
Mẫu thiết kế :

SingleObject.java
public class SingleObject {
//create an object of SingleObject
private static SingleObject instance = new SingleObject();
//make the constructor private so that this class cannot be
//instantiated
private SingleObject(){}

System.out.println("Inside Rectangle::draw() method.");
}
}
Square.java
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
ShapeFactory.java
public class ShapeFactory {
//use getShape method to get object of type shape
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 new Square();

Định nghĩa một giao diện cho việc tạo ra các đối tượng, nhưng hãy để lớp con để quyết định lớp
để khởi tạo
Đề cập đến các đối tượng mới được tạo ra thông qua một giao diện phổ biến
Mẫu thiết kế :
4.Abstract Factory
Ý nghĩa : Một hệ thống phải được cấu hình với một trong nhiều sản phẩm của hệ thống.
Một hệ thống nên được độc lập với sản phẩm của mình được tạo ra, sáng tác và đại diện .
Các sản phẩm từ cùng một hệ thống nên được sử dụng tất cả cùng nhau, các sản phẩm từ các hệ
thống khác nhau không được sử dụng cùng nhau và hạn chế này phải được đảm bảo.
Chỉ các giao diện sản phẩm được tiết lộ, việc triển khai vẫn còn ẩn cho khách hàng.
Tình huống sử dụng :
java.awt.Toolkit - lớp cha trừu tượng của tất cả các triển khai thực tế của Abstract Window
Toolkit. Lớp con của Bộ công cụ được sử dụng để ràng buộc các thành phần khác nhau để cụ thể
triển khai bộ công cụ bản địa (Java AWT).
javax.swing.LookAndFeel - một Abstract Factory swing để swithct giữa một số giao diện cho
các thành phần hiển thị (Java Swing).
java.sql.Connection - một Abstract Factory swing mà tạo báo cáo, PreparedStatements,
CallableStatements, cho mỗi đơn vị cơ sở dữ liệu.
Mẫu thiết kế :Shape.java
public interface Shape {
void draw();
}
Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");

public void fill() {
System.out.println("Inside Green::fill() method.");
}
}
Blue.java
public class Blue implements Color {
@Override
public void fill() {
System.out.println("Inside Blue::fill() method.");
}
}
AbstractFactory.java
public abstract class AbstractFactory {
abstract Color getColor(String color);
abstract Shape getShape(String shape) ;
}
.
ShapeFactory.java
public class ShapeFactory extends AbstractFactory {
@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 new Square();

}
FactoryProducer.java
public class FactoryProducer {
public static AbstractFactory getFactory(String choice){
if(choice.equalsIgnoreCase("SHAPE")){
return new ShapeFactory();
} else if(choice.equalsIgnoreCase("COLOR")){
return new ColorFactory();
}
return null;
}
}
AbstractFactoryPatternDemo.java
public class AbstractFactoryPatternDemo {
public static void main(String[] args) {
//get shape factory
AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
//get an object of Shape Circle
Shape shape1 = shapeFactory.getShape("CIRCLE");
//call draw method of Shape Circle
shape1.draw();
//get an object of Shape Rectangle
Shape shape2 = shapeFactory.getShape("RECTANGLE");
//call draw method of Shape Rectangle
shape2.draw();

//get an object of Shape Square
Shape shape3 = shapeFactory.getShape("SQUARE");
//call draw method of Shape Square
shape3.draw();

Mẫu thiết kế :
Shape.java
public abstract class Shape implements Cloneable {

private String id;
protected String type;

abstract void draw();

public String getType(){
return type;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public Object clone() {
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}

}
ShapeCache.java
import java.util.Hashtable;
public class ShapeCache {
private static Hashtable<String, Shape> shapeMap
= new Hashtable<String, Shape>();
public static Shape getShape(String shapeId) {
Shape cachedShape = shapeMap.get(shapeId);
return (Shape) cachedShape.clone();
}
// for each shape run database query and create shape
// shapeMap.put(shapeKey, shape);
// for example, we are adding three shapes
public static void loadCache() {
Circle circle = new Circle();
circle.setId("1");
shapeMap.put(circle.getId(),circle);
Square square = new Square();
square.setId("2");
shapeMap.put(square.getId(),square);
Rectangle rectangle = new Rectangle();
rectangle.setId("3");
shapeMap.put(rectangle.getId(),rectangle);
}
}
PrototypePatternDemo.java
public class PrototypePatternDemo {
public static void main(String[] args) {
ShapeCache.loadCache();
Shape clonedShape = (Shape) ShapeCache.getShape("1");

đối tượng phức tạp, vì vậy quá trình có thể được sử dụng lại để tạo ra một đối tượng khác nhau
hình thành cùng một tập hợp của các đối tượng đơn giản như là người đầu tiên.
Tình huống sử dụng :
Xác định một thể hiện cho việc tạo ra một đối tượng nhưng để cho lớp con quyết định lớp để
khởi tạo
Đề cập đến các đối tượng mới được tạo ra thông qua một giao diện phổ biến
Mẫu thiết kế :
Behavioral Design Patterns:
1.Chain of Responsibility
Ý nghĩa :
Chain of Responsibiliy cho phép một đối tượng để gửi một lệnh mà không biết những gì đối
tượng sẽ tiếp nhận và xử lý nó. Yêu cầu được gửi từ một đối tượng khác làm cho chúng phần của
một chuỗi và mỗi đối tượng trong chuỗi này có thể xử lý lệnh , vượt qua nó hoặc làm cả hai. Ví
dụ thông thường nhất của một máy bằng cách sử dụng Chain of Responsibiliy là bán hàng tự
động khe cắm máy đồng xu : hơn là có một khe đối với từng loại đồng tiền , máy chỉ có một khe
cắm cho tất cả chúng . Các đồng tiền giảm được chuyển đến nơi lưu trữ thích hợp được xác định
bởi người nhận lệnh .
Tình huống sử dụng :
Nó tránh được gắn cho người gửi một yêu cầu để nhận của nó, cho các đối tượng khác theo cách
này khả năng xử lý các yêu cầu quá.
Các đối tượng trở thành bộ phận của một chuỗi và yêu cầu được gửi từ một đối tượng khác trên
toàn chuỗi cho đến khi một trong những đối tượng sẽ xử lý nó.
Mẫu thiết kế
AbstractLogger.java
public abstract class AbstractLogger {
public static int INFO = 1;
public static int DEBUG = 2;
public static int ERROR = 3;
protected int level;
//next element in chain or responsibility

protected void write(String message) {
System.out.println("Error Console::Logger: " + message);
}
}
FileLogger.java
public class FileLogger extends AbstractLogger {
public FileLogger(int level){
this.level = level;
}
@Override
protected void write(String message) {
System.out.println("File::Logger: " + message);
}
}
ChainPatternDemo.java
public class ChainPatternDemo {
private static AbstractLogger getChainOfLoggers(){
AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);
errorLogger.setNextLogger(fileLogger);
fileLogger.setNextLogger(consoleLogger);
return errorLogger;
}
public static void main(String[] args) {
AbstractLogger loggerChain = getChainOfLoggers();
loggerChain.logMessage(AbstractLogger.INFO,
"This is an information.");
loggerChain.logMessage(AbstractLogger.DEBUG,
"This is an debug level information.");

Quantity: " + quantity +" ] sold");
}
}
BuyStock.java
public class BuyStock implements Order {
private Stock abcStock;
public BuyStock(Stock abcStock){
this.abcStock = abcStock;
}
public void execute() {
abcStock.buy();
}
}
SellStock.java
public class SellStock implements Order {
private Stock abcStock;
public SellStock(Stock abcStock){
this.abcStock = abcStock;
}
public void execute() {
abcStock.sell();
}
}
.
Broker.java
import java.util.ArrayList;
import java.util.List;
public class Broker {
private List<Order> orderList = new ArrayList<Order>();
public void takeOrder(Order order){


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status