转载

设计模式之第9章-原型模式(Java实现)

设计模式之第9章-原型模式(Java实现)

“快到春节了,终于快放假了,天天上班好累的说。”“确实啊,最近加班比较严重,项目快到交付了啊。”“话说一到过节,就收到铺天盖地的短信轰炸,你说发短信就发吧,大多数还是一样的,群发。”“就是就是,上次我收到一个,竟然连名字都给弄错了,简直没法说啊,要不然就不发得了,干嘛弄得那么麻烦。”“所以说,才会有群发的短信我不回这个段子嘛。”“对了,今天你不是就要讲那个原型模式什么的,就是类似于群发的是吧。”“嘿嘿,天机不可泄露。”(PS:还天机不可泄露,学会吊起胃口来了。)

原型模式之自我介绍

鄙人不才,正是原型模式是也,由于实现起来巨简单,所以应用的场景那可是相当的多啊。相关的定义如下:Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.转换成中文就是:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。至于类图如下所示:

设计模式之第9章-原型模式(Java实现)

是不是简单的没话说。因为它的核心也就是一个clone方法罢了,通过该方法对对象进行拷贝。而Java又提供了Cloneable接口来标示这个方法是可拷贝的,看到这里有点迷糊?标示算几个意思?因为JDK中没有方法,如果想使用的话,覆盖clone()方法才可以。

原型模式之自我分析

由于我想了半天都没想出什么缺点,所以只好介绍优点来着,不是我不谦虚啊,真心是没有缺点啊。(PS:不要丢鸡蛋,那边那位,泥垢了,别砸,别砸了,哎呦喂,我的脸,别砸脸成么,我就是靠这个吃饭的啊。)优点:

  • 对客户隐藏了具体的产品类,减少了客户知道名字的数目。
  • 运行时可以增加和删除。
  • 减少子类构造。
  • 用类动态配置应用,性能比较好。

原型模式之实现

好吧,我有一个恋爱,想和你谈谈,哦,不,口误,是 一个原型模式的实现,就说那个短信吧,被人群发是不是很不爽?但是不群发一个一个发又很累是不是?没关系,这时候就是我登场的时候了,让你群发,又不让别人看出来。

首先是短信的模板类:

1 public class Template{ 2     //短信内容 3     private String context = "恭喜发财,红包拿来"; 4  5     //取得内容 6     public String getContext(){ 7         return this.context; 8     } 9 }

短信类代码:

设计模式之第9章-原型模式(Java实现)
 1 public class Message implements Cloneable{  2     //收信人名字  3     private String receiver;  4     //短信内容  5     private String context;  6     //构造函数  7     public Message (Template template)  8     {  9         this.context = template.getContext(); 10     } 11  12     @Override 13     public Message clone(){ 14         Message message = null; 15         try{ 16             message = (Message)super.clone(); 17         } 18         catch(CloneNotSupportedException e){ 19             e.printStackTrace(); 20         } 21         return message; 22     } 23  24     //setter/getter方法 25     public String getContext(){ 26         return context; 27     } 28  29     public void setContext(String context){ 30         this.context = context; 31     } 32  33     public String getReceiver(){ 34         return receiver; 35     } 36  37     public void setReceiver(String receiver){ 38         this.receiver = receiver; 39     } 40  41  42 }
View Code

以上就是具体的原型模式的具体实现。怎么,不知道怎么用是么?好的,来个具体的场景类:

设计模式之第9章-原型模式(Java实现)
 1 public class Client{  2     public static void main(String[] args) {  3         String[] name = {"Jack","Tom","voidy"};  4         Message message = new Message(new Template());  5         for (String n :name ) {  6             message.setReceiver(n);  7             Message cloneMessage = message.clone();  8             sendMessage(cloneMessage);  9         } 10     } 11     public static void sendMessage(Message message){ 12         System.out.println(message.getReceiver()); 13         System.out.println(message.getContext()); 14     } 15 }
View Code

好了,基本上就是那么多了。

原型模式之使用场景

当遇到以下场景时,就可以考虑使用原型模式了:

  • 当要实例化的类是在运行时刻指定时。如:动态装载。
  • 当为了避免创建一个与产品类层次平行的工厂时。
  • 当一个类的实例只有几个不同的状态组合时。

恩,本次的设计模式就到此为止。预知后式为何,且听下回分解。

PS:因水平有限,若有不对之处,欢迎指出,以防误人子弟耳。

PS:本博客欢迎转发,但请注明博客地址及作者~

博客地址: http://www.cnblogs.com/voidy/

博客新址: http://voidy.gitcafe.com

<。)#)))≦

正文到此结束
Loading...