-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
Nhân bản dễ dàng
Nếu đã từng lập trình java, c# chắc hẳn chúng ta đã quen với hàm clone rồi đúng không? Đó chính là ví dụ kinh điển nhất của Prototype design pattern:
Object clonedObject = object.clone();
Giới thiệu
Các tính năng duplicate
file gần như là mặc định trên các giao diện của hệ điều hành hay các công cụ chúng ta vẫn dùng hàng ngày. Nếu như cứ mỗi lần để tạo ra 1 đối tượng y chang, chúng ta lại phải đi tạo mới rồi set cài đặt thuộc tính cho nó thì sẽ tương đối vất vả và mất thời gian code, đặc biệt với các đối tượng phức tạp. Vậy nên trong trường hợp này, Prototype pattern sẽ là viên đạn bạc cho chúng ta.
Mục tiêu
Prototype pattern ra đời với mục tiêu:
- Tạo ra 1 đối tượng y hiện đối tượng mẫu
- Quy định kiểu của đối tượng được tạo ra
Ví dụ
Chúng ta sẽ lấy ví dụ về động vật, có 2 loại đó là Bird và Fish cùng thừa kế lớp cha là Animal:
@Data
public static class Animal implements Cloneable {
private String name;
private int age;
@Override
public Animal clone() {
final Animal animal = new Animal();
cloneProperties(animal);
return animal;
}
protected void cloneProperties(Animal animal) {
animal.setName(name);
animal.setAge(age);
}
}
@Data
public static class Bird extends Animal {
private int maxFlyTime;
@Override
public Bird clone() {
final Bird bird = new Bird();
bird.setMaxFlyTime(maxFlyTime);
cloneProperties(bird);
return bird;
}
}
@Data
public static class Fish extends Animal {
private String preferWater;
@Override
public Fish clone() {
final Fish fish = new Fish();
fish.setPreferWater(preferWater);
cloneProperties(fish);
return fish;
}
}
Và khi sử dụng sẽ thế này:
final Bird bird = new Bird();
bird.setAge(1);
bird.setName("bird");
bird.setMaxFlyTime(10);
final Animal cloneBird = bird.clone();
final Fish fish = new Fish();
fish.setAge(3);
fish.setName("fish");
fish.setPreferWater("sea");
final Animal cloneFish = fish.clone();
Chúng ta có thể thấy hai đối tượng ban đầu là bird và fish được tạo ra khá phức tạp khi phải set khá nhiều trường dữ liệu, nhưng những đối tượng được clone thì lại không cần thiết vậy nên công sức sẽ được giảm đi rất nhiều.
Kết luận
Tính năng clone thường khá phổ biến, và với Prototype pattern sẽ giúp chúng ta tiết kiệm được rất nhiều công sức vậy nên đừng quên sử dụng nó khi chúng ta cần nhé.
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local