原型模式之克隆一个图形对象(圆形和矩形)

1、 实例概况

有一个画板,可以从中取得两种图形:圆形(circle)和矩形(rectangle),它们都属于原型(prototype),当客户需要画一个图形时便从画板中取一个图形,在这个问题中,原型模式的关键在于画板克隆一个图形对象,然后返回给客户。

2、实例类图

原型模式

3、实例实现代码

3.1抽象原型类ZC32Graph

public interface ZC32Graph extends Cloneable{
	public Object clone();
	public String getName();
	public  void  draw();
}

3.11具体原型类ZC32Rectangle

public class ZC32Rectangle implements ZC32Graph{
	  public  Object clone(){
	       Object clone= null ;
	        try {
	           clone= (Object)super.clone();
	       } catch (CloneNotSupportedException e){
	          
	       }
	        return  clone;
	    }
	     public  String getName(){
	        return   "Rectangle" ;
	    }
	     public  void  draw(){
	       System.out.println( "Draw a rectangle" );
	     }}

3.12具体原型类ZC32Circle

public class ZC32Circle implements ZC32Graph{
	public  Object clone(){
	       Object clone= null ;
	        try {
	           clone= (Object)super.clone();
	       } catch (CloneNotSupportedException e){
	          
	       }
	        return  clone;
	    }
	     public  String getName(){
	        return   "circle" ;
	    }
	     public  void  draw(){
	       System.out.println("Draw a circle");
	    }
}

3.2原型管理器类ZC32Manager

package yuanxingmoshi;
import java.util.HashMap;
import java.util.Hashtable;

public class ZC32Manager {
	  private  HashMap  ht =new  HashMap();
	     public  ZC32Manager(){
	        ht.put( "circle", new ZC32Circle());
	        ht.put( "rectangle", new ZC32Rectangle());      
	    }
	     public  Object getClone(String key){
	       Object obj =  ht.get(key);
	        if (obj!= null ) return  ((ZC32Graph)obj).clone();
	        return   null ;
}}

3.3客户端测试类ZC32Client


public class ZC32Client {
	public   static   void  main(String[] args){
		ZC32Manager ma =  new  ZC32Manager();
		
		ZC32Graph obj1=(ZC32Graph)ma.getClone( "circle" );
		obj1.draw();
	        
	        ZC32Graph obj2=(ZC32Graph)ma.getClone( "rectangle" );
	        obj2.draw();
	    }
}

4、结果

原型模式

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我超(菜鸡版)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值