Factory Pattern
1. Lớp cha trong Factory Design Pattern
Lớp cha trong FDP có thể là một giao diện (interface), lớp ảo (abstract class) hay một lớp bình thường.
Ví dụ:
package com.journaldev.design.model; public abstract class Computer { public abstract String getRAM(); public abstract String getHDD(); public abstract String getCPU(); @Override public String toString(){ return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU(); } }
2. Các lớp con của Factory Design Pattern
Giả sử chúng ta có 2 lớp con của lớp Computer là PC và Server như sau
package com.journaldev.design.model; public class PC extends Computer { private String ram; private String hdd; private String cpu; public PC(String ram, String hdd, String cpu){ this.ram=ram; this.hdd=hdd; this.cpu=cpu; } @Override public String getRAM() { return this.ram; } @Override public String getHDD() { return this.hdd; } @Override public String getCPU() { return this.cpu; } }và
package com.journaldev.design.model; public class Server extends Computer { private String ram; private String hdd; private String cpu; public Server(String ram, String hdd, String cpu){ this.ram=ram; this.hdd=hdd; this.cpu=cpu; } @Override public String getRAM() { return this.ram; } @Override public String getHDD() { return this.hdd; } @Override public String getCPU() { return this.cpu; } }
3. Lớp Factory
Dựa vào các lớp trên, lớp factory được xây dựng như sau để thỏa mãn mục đích của Factory Pattern.
package com.journaldev.design.factory; import com.journaldev.design.model.Computer; import com.journaldev.design.model.PC; import com.journaldev.design.model.Server; public class ComputerFactory { public static Computer getComputer(String type, String ram, String hdd, String cpu){ if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu); else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu); return null; } }Một số điểm cần chú ý là:
- Phương thức trả về khởi tạo của lớp tương ứng được thiết lập ở chế độ static
- Chú ý rằng dựa trên dữ liệu đầu vào để quyết định lớp con nào sẽ được khởi tạo. Do vậy getComputer chính là phương thức factory.
Ví dụ sử dụng Factory Pattern ở trên như sau:
package com.journaldev.design.test; import com.journaldev.design.abstractfactory.PCFactory; import com.journaldev.design.abstractfactory.ServerFactory; import com.journaldev.design.factory.ComputerFactory; import com.journaldev.design.model.Computer; public class TestFactory { public static void main(String[] args) { Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz"); Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz"); System.out.println("Factory PC Config::"+pc); System.out.println("Factory Server Config::"+server); } }Kết quả hiển thị là
Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
No comments :
Post a Comment