Professional Documents
Culture Documents
BCCK
BCCK
LỜI CẢM ƠN
Cảm ơn thầy Nguyễn Thanh Phước đã trực tiếp giảng dạy và hỗ trợ chúng tôi
thực hiện đồ án lần này.
ii
Tôi xin cam đoan đây là sản phẩm đồ án của chúng tôi và được sự hướng dẫn
của TS Nguyễn Thanh Phước. Các nội dung nghiên cứu, kết quả trong đề tài này là
trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây. Những số liệu trong
các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu
thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo.
Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như số liệu
của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc.
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm
về nội dung đồ án của mình. Trường đại học Tôn Đức Thắng không liên quan đến
những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có).
TP. Hồ Chí Minh, ngày tháng năm
Tác giả
(ký tên và ghi rõ họ tên)
Tạ Trung Hiếu
Trần Văn An
iii
MỤC LỤC
LỜI CẢM ƠN.................................................................................................................i
PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN.........................................iii
MỤC LỤC...................................................................................................................... 1
GIỚI THIỆU..................................................................................................................2
CHƯƠNG 1 – SINGLETON PATTERN.......................................................................3
1.1 Lý do áp dụng................................................................................................3
1.2 Sơ đồ lớp.......................................................................................................3
1.3 Code áp dụng.................................................................................................3
CHƯƠNG 2 – STRATEGY PATTERN........................................................................5
2.1 Lý do áp dụng................................................................................................5
2.2 Sơ đồ lớp.......................................................................................................5
2.3 Code áp dụng.................................................................................................5
CHƯƠNG 3 – FACTORY PATTERN...........................................................................8
3.1 Lý do áp dụng................................................................................................8
3.2 Sơ đồ lớp.......................................................................................................8
3.3 Code áp dụng.................................................................................................8
CHƯƠNG 4 – ABSTRACT FACTORY PATTERN...................................................10
4.1 Lý do áp dụng..............................................................................................10
4.2 Sơ đồ lớp.....................................................................................................10
4.3 Code áp dụng...............................................................................................10
CHƯƠNG 5 – COMMAND PATTERN......................................................................12
4.1 Lý do áp dụng..............................................................................................12
4.2 Sơ đồ lớp.....................................................................................................12
4.3 Code áp dụng...............................................................................................12
2
GIỚI THIỆU
Chương trình AH Tools là một trang web tích hợp các công cụ tiện ích cơ bản
như tính toán, vẽ hình, chuyển đổi tiền tệ, chuyển đổi thời gian giữa các khu vực,
random ngẩu nhiên... Chương trình được viết bằng ngôn ngữ Javascript và hiển thị trên
giao diện web html.
3
return {
getInstance: function () {
if (!instance) instance = init();
return instance;
},
};
})()
// action
var inst = mySingleton.getInstance()
$("#switchBtn").click(function (e) {
4
let str = $("#countries").val()
let data = str.split("|")
let n = parseInt(data[0])
let area = data[1]
let new_hours
if (curent_hours + n >= 24) {
new_hours = curent_hours + n - 24
} else {
new_hours = curent_hours + n
}
inst.setInfo(new_hours, area)
inst.setUI()
})
5
ChuyenDoi.prototype = {
setStrategy: function (donvi) {
this.donvi = donvi
},
calculate: function (package) {
return this.donvi.calculate(package)
},
}
var USDandVND = function () {
this.calculate = function (package) {
let tigia = 23081.38
console.log(package, tigia)
if (package["from"] == "VND") {
return package["amount"] / tigia
}
return package["amount"] * tigia
}
}
6
var CNYandVND = function () {
this.calculate = function (package) {
let tigia = 3539.56
console.log(package, tigia)
if (package["from"] == "VND") {
return package["amount"] / tigia
}
return package["amount"] * tigia
}
}
var USDandCNY = function () {
this.calculate = function (package) {
let tigia = 6.52
console.log(package, tigia)
if (package["from"] == "CNY") {
return package["amount"] / tigia
}
return package["amount"] * tigia
}
}
const contains = (first, second) => {
const indexArray = first.map((el) => {
return second.indexOf(el)
})
return indexArray.indexOf(-1) === -1
}
$("#kqButton").click(() => {
var amount = parseFloat($("#soluong").val())
var from = $("#tu").val()
var to = $("#sang").val()
var package = {
amount: amount,
from: from,
to: to,
7
}
// console.log(from, to)
let chuyendoi = new ChuyenDoi()
if (contains(["VND", "USD"], [from, to]) == true) {
chuyendoi.setStrategy(new USDandVND())
} else if (contains(["CNY", "VND"], [from, to]) == true) {
chuyendoi.setStrategy(new CNYandVND())
} else if (contains(["CNY", "USD"], [from, to]) == true) {
chuyendoi.setStrategy(new USDandCNY())
} else {
return $("#kq").html("")
}
// chuyendoi.setStrategy(donvi)
return $("#kq").html(chuyendoi.calculate(package))
})
8
3.2 Sơ đồ lớp
function randomString() {
var length = parseInt($("#length").val());
var result = [];
var characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result.push(
characters.charAt(Math.floor(Math.random() * charactersLength))
);
}
this.str = result.join("");
}
function Factory() {
this.createRandom = function (type) {
var random;
if (type === "integer") {
random = new randomNumber();
} else if (type === "string") {
random = new randomString();
}
random.type = type;
9
random.setUI = function () {
$("#random-result").append(`<p>${this.str}</p>`);
};
return random;
};
}
var factory = new Factory();
$("#gennum-btn").click(function (e) {
var gen = factory.createRandom("integer");
gen.setUI();
});
$("#genstr-btn").click(function (e) {
var gen = factory.createRandom("string");
gen.setUI();
});
$(".clear").click(function (e) {
$("#random-result").html("");
});
10
4.2 Sơ đồ lớp
let div = `<div class="mb-3" style="border-style: solid; border-color: coral
; width:${this.kichthuoc}px; height:${this.kichthuoc}px"></div>`
$("#drawbox").prepend(div)
}
function HinhVuongFactory() {
this.create = function (kichthuoc) {
return new HinhVuong(kichthuoc)
}
}
function HinhChuNhat(dai, rong) {
this.dai = dai
this.rong = rong
let div = `<div class="mb-3" style="border-style: solid; border-color: coral
; width:${this.dai}px; height:${this.rong}px"></div>`
$("#drawbox").prepend(div)
}
function HinhChuNhatFactory() {
this.create = function (dai, rong) {
return new HinhChuNhat(dai, rong)
}
}
function HinhTron(bankinh) {
this.bankinh = bankinh
let duongkinh = bankinh * 2
11
let div = `
<div class="mb-3 rounded-circle" style="border-style: solid; border-
color: coral; width:${duongkinh}px; height:${duongkinh}px "></div>
`
$("#drawbox").prepend(div)
}
function HinhTronFactory() {
this.create = function (bankinh) {
return new HinhTron(bankinh)
}
}
// action
$("#veChuNhat").click(function (e) {
let HinhChuNhat = new HinhChuNhatFactory()
let a = $("#dai").val()
let b = $("#rong").val()
HinhChuNhat.create(a, b)
})
$("#veVuong").click(function (e) {
let HinhVuong = new HinhVuongFactory()
let x = $("#dodai").val()
HinhVuong.create(x)
})
$("#veTron").click(function (e) {
let HinhTron = new HinhTronFactory()
let r = $("#bankinh").val()
HinhTron.create(r)
})
$(".clear-btn").click(function (e) {
$("#drawbox").html("")
})
12
4.2 Sơ đồ lớp
var Command = function (execute, undo, value) {
this.execute = execute
this.undo = undo
this.value = value
}
var AddCommand = function (value) {
return new Command(add, sub, value)
}
var SubCommand = function (value) {
return new Command(sub, add, value)
}
var MulCommand = function (value) {
return new Command(mul, div, value)
}
var DivCommand = function (value) {
13
return new Command(div, mul, value)
}
var Calculator = function () {
var current = 0
var commands = []
function action(command) {
var name = command.execute.toString().substr(9, 3)
return name.charAt(0).toUpperCase() + name.slice(1)
}
return {
execute: function (command) {
current = command.execute(current, command.value)
commands.push(command)
},
undo: function () {
var command = commands.pop()
current = command.undo(current, command.value)
},
getCurrentValue: function () {
return current
},
}
}
14