`
直线曲线
  • 浏览: 46240 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

29日学习原型设计模式

    博客分类:
  • java
阅读更多
今天阅读一设计模式的pdf,学习到原型设计模式的时候,看如下的例子有些摸不到头脑了。通过实践,判定其为错误的实现,对该pdf的作者很无语的。
其实现的代码如下:
public abstract class AbstractSpoon implements Cloneable{
	@Override
	protected Object clone() throws CloneNotSupportedException {
		System.out.println("clone");
		// TODO Auto-generated method stub
		Object object = null;
		try{
			object = super.clone();
		}catch(CloneNotSupportedException e){
			
		}
		return object;
	}
	
	public abstract void out();

	private String spoonName = null;

	public String getSpoonName() {
		return spoonName;
	}

	public void setSpoonName(String spoonName) {
		this.spoonName = spoonName;
	}	
}
public class Spoon1 extends AbstractSpoon{
	public Spoon1(){
		setSpoonName("spoon1");
	}
	@Override
	public void out() {
		// TODO Auto-generated method stub
		System.out.println(this.getSpoonName());
	}
	
}
public class Spoon2 extends AbstractSpoon{
	public Spoon2(){
		setSpoonName("spoon2");
	}
	public void out(){
		System.out.println(getSpoonName());
	}
}
public class MainTest {
	public static void main(String[] args){
		AbstractSpoon spoon1 = new Spoon1();
		AbstractSpoon spoon2 = new Spoon2();
		System.out.print("spoon1 ");spoon1.out();
		System.out.print("spoon2 ");spoon2.out();
	}
}

运行后发现根本就没有调用clone中的输出,也就是spoon2不是clone出来的。
通过查资料,通过以下uml图(在附件中)并实践的确实现了原型模式:
子类应包含父类的对象作为成员,子类构造函数中应显示调用该成员的clone方法,然后再对clone出的新对象进行修改。

  • 大小: 44 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics