1. Trang chủ
  2. » Công Nghệ Thông Tin

Dapan 1 2các mẫu thiết kế hướng ₫ối tượng

5 2 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 36,95 KB

Nội dung

Microsoft Word Dapan 1 1 doc Ta s dùng mẫu thiết kế Composite với lợc ồ class nh sau ể tổ chức các class liên quan ến hệ thống cung cấp dịch vụ dùng pin sc Vai trò, vị trí của từng phần tử tron[.]

Ta s dùng mẫu thiết kế Composite với lợc ồ class nh sau ể tổ chức class liên quan ến hệ thống cung cấp dịch vụ dùng pin sc : Vai trị, vị trí phần tử lợc ồ nh sau :  IBattery : cung cấp interface hợp cho ối tợng pin sc, interface hợp s cung cấp nhóm tác vụ : nhóm tác vụ chức nng pin sc, nhóm tác vụ qun lý thành phần ối tợng pin tích hợp  AbstractBattery : class ặc t thông tin ợc sử dụng chung cho loi pin Nó cần thực tác vụ qun lý thành phần ối tợng phức hợp (nhng thờng mức tối thiểu) ể ối tợng pin c bn khơng phi thực li chúng (vì không liên quan ến pin c bn)  Cell : class ặc t pin c bn  Battery : class ặc t pin tích hợp Sau ây mã nguồn VC# ể ặc t thành phần : //ặc t interface ối tợng pin interface IBattery { //1 Nhóm tác vụ chức nng ối tợng (tích hợp hay thành phần) //tác vụ tham kho cơng suất max battery int getFullCapacity(); //tác vụ tham kho công suất hành battery int getCurrentCapacity(); //tác vụ thi 1u (n vị iện nng) khi battery bool discharge(); //tác vụ np 1u vào battery bool charge(); //2 Nhóm tác vụ qun lý thành phần ối tợng tích hợp //tác vụ thêm thành phần b vào battery hành void gm_add(IBattery b); //tác vụ bớt thành phần b khi battery hành void gm_remove(IBattery b); } //ặc t class chứa thông tin dùng chung ối tợng pin abstract class AbstractBattery : IBattery { //tác vụ tham kho công suất max battery public abstract int getFullCapacity(); //tác vụ tham kho công suất hành battery public abstract int getCurrentCapacity(); //tác vụ thi 1u khi battery public abstract bool discharge(); //tác vụ np 1u vào battery public abstract bool charge(); //tác vụ thêm battery b vào battery hành public virtual void gm_add(IBattery b) { } //tác vụ bớt battery b khi battery hành public virtual void gm_remove(IBattery b) { } } //ặc t pin c bn class Cell : AbstractBattery { private int capacity; private int fullCapacity; //tác vụ khởi to battery public Cell(int capamax) { fullCapacity = capamax; capacity = capamax; } //tác vụ np 1u vào battery public override bool charge() { //version cha xử lý np công suất capacity++; return true; } //tác vụ thi 1u khi battery public override bool discharge() { //version cha xử lý cn công suất capacity ; return true; } //tác vụ tham kho công suất hành battery public override int getCurrentCapacity() { return capacity; } //tác vụ tham kho công suất max battery public override int getFullCapacity() { return fullCapacity; } //tác vụ gii mã trng thái battery thành chuỗi vn bn public override String ToString() { return capacity.ToString(); } } //ặc t pin tích hợp class Battery : AbstractBattery { //danh sách battery thành phần private List elems = new List(); int aCharger = -1; //thiết lập số battery ã np lần cuối int aDecharger = -1; //thiết lập số battery ã thi lần cuối //tác vụ khởi to battery tích hợp có nCells, cell có cơng suất capCells //dùng chiến lợc np/thi ợc qui ịnh bycycles public Battery(int nCells, int capCells, bool bycycles) { for (int i = 0; i < nCells; i++) { elems.Add(new Cell(capCells)); } //và việc khởi ộng khác cần } //tác vụ thêm battery b vào battery hành public override void gm_add(IBattery b) { elems.Add(b); } //tác vụ bớt battery b khi battery hành public override void gm_remove(IBattery b) { elems.Remove(b); } //tác vụ np 1u vào battery dùng chiến lợc Round-Robin public override bool charge() { //hiệu chỉnh số battery cần np aCharger = (aCharger + 1) % elems.Count; return elems[aCharger].charge(); } //tác vụ thi 1u khi battery dùng chiến lợc Round-Robin public override bool discharge() { //hiệu chỉnh số battery cần thi aDecharger = (aDecharger + 1) % elems.Count; return elems[aDecharger].charge(); } //tác vụ tham kho công suất hành battery public override int getCurrentCapacity() { int sum = 0; foreach (IBattery c in elems) { sum += c.getCurrentCapacity(); } return sum; } //tác vụ tham kho công suất max battery public override int getFullCapacity() { int sum = 0; foreach (IBattery c in elems) { sum += c.getFullCapacity(); } return sum; } //tác vụ gii mã trng thái battery thành chuỗi public override String ToString() { String buf = "["; foreach (IBattery c in elems) { buf += c + ", "; } return buf.Substring(0, buf.Length - 2) + "]"; } } Code chng trình nh ể dùng kiểm tra pin Cell, Battery có hot ộng úng theo ặc t hay không nh sau : static void Main(string[] args) { //thử to Cell có 2u IBattery b1 = new Cell(2); //hiển thị trình trng pin hành Console.WriteLine("DL max b1 = " + b1.getFullCapacity() + ", DL hành = " + b1.ToString()); //thử np thêm 1u hiển thị kết qu ể kiểm tra b1.charge(); Console.WriteLine("Dung lợng b1 sau np thêm 1u = " + b1.ToString()); //thử x 4u hiển thị kết qu ể kiểm tra b1.discharge(); b1.discharge(); b1.discharge(); b1.discharge(); Console.WriteLine("Dung lợng b1 sau x 4u = " + b1.ToString()); //thử to pin tích hợp b1 = new Cell(10); IBattery b2 = new Battery(3, 5, false); //dùng chiến lợc np/x MinMax IBattery b3 = new Battery(2, 10, false); //dùng chiến lợc np/x MinMax b3.gm_add(b1); b3.gm_add(b2); Console.WriteLine("Trng thái b3 = " + b3.ToString()); //thử x 2u hiển thị kết qu ể kiểm tra b3.discharge(); b3.discharge(); Console.WriteLine("b3 sau x 2u = " + b3.ToString()); //thử np 2u hiển thị kết qu ể kiểm tra b3.charge(); b3.charge(); Console.WriteLine("b3 sau np 2u = " + b3.ToString()); Console.Read(); }

Ngày đăng: 09/04/2023, 06:14