Avatar
0
Nguyen Thai Son Beginner
Tổ chức code theo design pattern dùng project dễ dàng scale, abstract factory và factory
Em từng hỏi a về 1 câu design pattern. Em cứ suy nghĩ mông lung cuối cùng nó là cách tổ chức cái source code 1 cách Scalable. Scalable ở đây k phải scale về performance mà scalable em muốn nói nó là tổ chức dễ dàng Mở rộng, không phải code lại quá nhiều

Ok, lấy ví dụ về DP phổ biến Factory Pattern :

Em có 3 loại thẻ : Agribank, Mbbank, VIBbank cùng có chung các thuộc tính : name, status, và method : draw(), transfer(). deposit(), payment()

Em có thể tạo 3 class Agri, Mb, VIB ok không sai

Nhưng nếu dùng Factory : tạo 1 interface chung cho 3 class Agri, MB, VIB,.. có đủ thuộc tính(em k sure vì chưa thấy ai đặt thuộc tính trong interface) và các abstract method, sau đó viết 3 class Agri, MB, VIB..

Vậy vấn đề xảy ra : khi có 1 class VPbank mới, em chỉ cần tạo thêm class VP implement interface kia phải không ạ thay vì tạo 1 class hoàn toàn mới

Cuối cùng : Sự khác biệt Factory và Abstract Factory là gì ạ. 2 pattern này có nhất thiết luôn song hành cùng nhau

  • Answer
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
A. Nếu anh không nhầm thì mã nguồn minh hoạ cho lớp cơ sở của em sẽ là:
public abstract class Bank {
    protected String name;
    protected String status;

    public abstract void draw();

    public abstract void transfer();

    public abstract void deposist();

    public abstract void payment();
}

public class BankFactory {

    public Bank newBank(String bankName) {}
}

Vậy thì khi có bank mới em sẽ cần tạo lớp VPbank kiểu thế này:

public class VPbank extends Bank {

    public void draw() {}

    public void transfer() {}

    public void deposist() {}

    public void payment() {}
}
B. Ở trên là em đang dùng Factory design pattern, em chỉ cần thay đổi thế này thì nó sẽ thành Abstract Factory:
java
public abstract class AbstractBankFactory {

    public abstract Bank newBank(String bankName) {}
}

public class BankFactory extends AbstractBankFactory {

    private final TpBankFactory tpBankFactory;
    private final VpBankFactory vpBankFactory;
 
    public Bank newBank(String bankName) {
        if (bankName == 'tpBank') {
            reutrn tpBankFactory.newBank();
        } else if (bankName == 'vpBank') {
            reutrn vpBankFactory.newBank();
        }
    }
}
Ở đây có một lớp mới là AbstractBankFactory, lớp BankFactory sẽ đóng vai trò là lớp cài đặt để gọi và tạo sản phẩm, thông thường nó sẽ gọi các lớp factory khác để tạo, ví dụ như ở đây là TpBankFactory hay VpBankFactory.
  • 0
  • Reply