PrototypePattern(23种设计模式之一)


设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则

PrototypePattern,UML抽象图百度找,代码实现如下

使用原型设计模式设计一个克隆对象的过程。

参与者接口

package PrototypePattern;
public interface Person extends Cloneable {
    public abstract Person createPerson();  
    public abstract String printPersonInfo();  
}

具体参与者类

package PrototypePattern.Impl;
import PrototypePattern.Person;
public class BeautifulGirl implements Person {
    private String name;  
    private int height;  
	public BeautifulGirl(String name, int height) {
		this.name = name;
		this.height = height;
	}

	public Person createPerson() {
		BeautifulGirl girl = null; 
		 try {
			 girl = (BeautifulGirl)this.clone();  
	     } catch (CloneNotSupportedException ex) {  
	         ex.printStackTrace();  
	     }  
	     return girl;  
	}
	public String printPersonInfo() {
		return "This beautiful girl's name is "+name+". she's height is "+height+".";
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}	
}

测试类

package PrototypePattern;
import PrototypePattern.Impl.BeautifulGirl;
public class Test {

	public static void main(String[] args) {
		Person girl = new BeautifulGirl("wangzhaojun",170);  
	    Person girl1 = girl.createPerson();  
	    Person girl2 = girl.createPerson();  
	    System.out.println(girl.printPersonInfo());  
	    System.out.println(girl1.printPersonInfo());  
	    System.out.println(girl2.printPersonInfo());
	}
}

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
####重点是: 1)克隆的对象与原对象不是同一个对象; 2)克隆对象与原对象的类型一样; 3)如果对象x的equals()方法定义恰当的话,那么x.clone().equals(x)应当是成立的。 ####工作原理: Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. ####实用性: 当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者 为了避免创建一个与产品类层次平行的工厂类层次时;或者 当一个类的实例只能有几个不同状态组合中的一种时。 建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。 ####扩展 类名是一种束缚 如果硬是把类名塞到程序源代码类会发生什么问题?把程序中利用的类名写到里面不是理所当然的吗???? 面向对象程序设计的一个目的:“零件化复用”。当源代码里写下类名后,就无法跟该类分离了。必须紧密结合在一起的类名写到源代码内是理所当然的,根本不成问题;真正的问题是应该分离独立成零件的类名却被写到源代码里面了。
别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
原文地址:https://www.cnblogs.com/1996jiwei/p/6498629.html