Skip to content

Commit bb0baf6

Browse files
committed
update
1 parent a2888aa commit bb0baf6

File tree

6 files changed

+119
-0
lines changed

6 files changed

+119
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package Creational_Pattern.Prototype;
2+
3+
public class Animal implements Cloneable{
4+
private String name;
5+
private int age;
6+
7+
@Override
8+
public Animal clone() {
9+
final Animal animal = new Animal();
10+
cloneProperties(animal);
11+
return animal;
12+
}
13+
14+
protected void cloneProperties(Animal animal) {
15+
animal.setName(name);
16+
animal.setAge(age);
17+
}
18+
19+
public void setName(String name) {
20+
this.name = name;
21+
}
22+
23+
public void setAge(int age) {
24+
this.age = age;
25+
}
26+
27+
public String getName() {
28+
return name;
29+
}
30+
31+
public int getAge() {
32+
return age;
33+
}
34+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package Creational_Pattern.Prototype;
2+
3+
public class Bird extends Animal {
4+
private int maxFlyTime;
5+
6+
@Override
7+
public Bird clone() {
8+
final Bird bird = new Bird();
9+
bird.setMaxFlyTime(maxFlyTime);
10+
cloneProperties(bird);
11+
return bird;
12+
}
13+
14+
public void setMaxFlyTime(int maxFlyTime) {
15+
this.maxFlyTime = maxFlyTime;
16+
}
17+
18+
public int getMaxFlyTime() {
19+
return maxFlyTime;
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package Creational_Pattern.Prototype;
2+
3+
public class Fish extends Animal {
4+
private String preferWater;
5+
6+
@Override
7+
public Fish clone() {
8+
final Fish fish = new Fish();
9+
fish.setPreferWater(preferWater);
10+
cloneProperties(fish);
11+
return fish;
12+
}
13+
14+
public void setPreferWater(String preferWater) {
15+
this.preferWater = preferWater;
16+
}
17+
18+
public String getPreferWater() {
19+
return preferWater;
20+
}
21+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package Creational_Pattern.Prototype;
2+
3+
public class PrototypePattern {
4+
public static void main(String[] args) {
5+
final Bird bird = new Bird();
6+
bird.setAge(1);
7+
bird.setName("bird");
8+
bird.setMaxFlyTime(10);
9+
10+
// copy
11+
final Animal cloneBird = bird.clone();
12+
13+
final Bird cloneBird1 = bird.clone();
14+
15+
System.out.println(bird.hashCode());
16+
System.out.println(cloneBird.hashCode());
17+
18+
System.out.println("Bird: " + bird.getMaxFlyTime() + " -> " + bird.getName() + " -> " + bird.getAge());
19+
System.out.println("Bird1: " + cloneBird1.getMaxFlyTime() + " -> " + cloneBird1.getName() + " -> " + cloneBird1.getAge());
20+
21+
22+
final Fish fish = new Fish();
23+
fish.setAge(3);
24+
fish.setName("fish");
25+
fish.setPreferWater("sea");
26+
final Animal cloneFish = fish.clone();
27+
28+
}
29+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
## Prototype Pattern
3+
4+
- Prototype pattern là một trong những Creational pattern. Nó có nhiệm vụ khởi tạo một đối tượng bằng cách clone một đối tượng đã tồn tại thay vì khởi tạo với từ khoá new. Đối tượng mới là một bản sao có thể giống 100% với đối tượng gốc, chúng ta có thể thay đổi dữ liệu của nó mà không ảnh hưởng đến đối tượng gốc.
5+
- Prototype Pattern được dùng khi việc tạo một object tốn nhiều chi phí và thời gian trong khi bạn đã có một object tương tự tồn tại.
6+
7+
8+
Prototype pattern ra đời với mục tiêu:
9+
+ Tạo ra 1 đối tượng y hiện đối tượng mẫu
10+
+ Quy định kiểu của đối tượng được tạo ra
11+
12+
13+
=> Có thể sử dụng Prototype Pattern với Builder Pattern cho thuận tiện
14+
10.3 KB
Loading

0 commit comments

Comments
 (0)