設計模式--原型模式

原型模式-基本介紹
基本介紹
- 原型模式(Prototype模式)指:用原型執行個體指定建立的種類,并且通過拷貝這些原型,建立新的對象
- 原型模式是喲中建立型設計模式,允許一個對象超級愛你再超級愛你另一個可定制的對象,無需知道建立的細節
- 工作原理是:通過将一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象通過請求原型對象拷貝它們自己來實施建立愛你,即 對象.clone()
克隆羊問題
問題: 現在有一隻羊tom ,姓名為 :tom,顔色為:白色,請編寫程式建立和tom羊完全屬性相同的10隻羊
- 按照我們之前的寫法
建立Sheep 類
@Data
public class Sheep {
//姓名
private String name;
//年齡
private Integer age;
//顔色
private String color;
public Sheep(String name, Integer age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
}
編寫測試類
public class Test {
public static void main(String[] args) {
Sheep sheep =new Sheep("tom",1,"白色");
Sheep sheep2 = new Sheep(sheep.getName(),sheep.getAge(),sheep.getColor());
Sheep sheep3 = new Sheep(sheep.getName(),sheep.getAge(),sheep.getColor());
Sheep sheep4 = new Sheep(sheep.getName(),sheep.getAge(),sheep.getColor());
System.out.println(sheep);
System.out.println(sheep2);
System.out.println(sheep3);
System.out.println(sheep4);
}
}
- 傳統方式解決克隆羊的問題
- 有點好了解,簡單
- 在建立新的對象的時候,總是需要重新擷取原始對象的屬性,如果建立對象複雜,效率低,不夠靈活
使用原型模式 代碼改造
@Data
public class Sheep implements Cloneable{
//姓名
private String name;
//年齡
private Integer age;
//顔色
private String color;
public Sheep(String name, Integer age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
//克隆該執行個體,預設實用化clone方法來完成
@Override
protected Object clone() throws CloneNotSupportedException {
Sheep sheep = null;
sheep =(Sheep)super.clone();
return sheep;
}
public static void main(String[] args) throws CloneNotSupportedException {
Sheep sheep =new Sheep("tom",1,"白色");
Sheep sheep2= (Sheep) sheep.clone();
System.out.println(sheep);
System.out.println(sheep2);
}
- 原型模式在Spring架構中應用
//已原型模式建立
<bean id ="id" class="com.yxl.bean.Monster" scope="prototype">
個人部落格:
http://blog.yanxiaolong.cn/