追MM之原型模式实现

简介:
跟MM用QQ聊天,一定要说些深情的话语了。但是,学理科的,哪有那多的情话啊,所以只能在网上搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。
 
 
抽象原型角色:给出具体原型类的接口,一般要继承Cloneable接口
具体原型:被复制的对象,需要时,需要重写clone方法。在这里,实现clone 有深复制和前复制两种。
原型管理器:创建具体原型类的对象,并记录每一个被创建的对象。(init方法)
 
源代码
抽象原型
package prototype; 

public  interface Message  extends Cloneable{ 
/* 
*    信息都是可以被发送的 
*/
 
   public  void send(String content); 
    
   public String getContent(); 
    
   public Object clone(); 

 
具体原型
package prototype; 

import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 

public  class LoveMessage  implements Message,Serializable { 

   private String content; 

   public  void send(String content) { 
     this.content = content; 
  } 

  @Override 
   public Object clone() { 
    ByteArrayOutputStream bo =  new ByteArrayOutputStream(); 
    ObjectOutputStream oo; 
    InputStream bi; 
    ObjectInputStream oi =  null
    Object target =  null
     try { 
      oo =  new ObjectOutputStream(bo); 
      oo.writeObject( this); 

      bi =  new ByteArrayInputStream(bo.toByteArray()); 
      oi =  new ObjectInputStream(bi); 
      target = oi.readObject(); 
    }  catch (IOException e) { 
      e.printStackTrace(); 
    }  catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
    } 
     return target; 
  } 

   public String getContent() { 
     
     return  this.content; 
  } 


 
原型管理器
package prototype; 

import java.util.Vector; 

public  class MessageManager { 

   public Vector<Message> messages =  new Vector<Message>(); 
    
   public  void add(Message message){ 
    messages.add(message); 
  } 
    
   public Message getClone( int index){ 
    Message message = messages.get(index); 
     if( message !=  null){ 
       return (Message) message.clone(); 
    } 
     return  null
  } 

 
客户端
package prototype; 

public  class Client { 

   public  static  void init(MessageManager mgr){ 
    Message m1 =  new LoveMessage(); 
    m1.send( "我爱你,你却爱着他"); 
    mgr.add(m1);     
    Message m2 =  new LoveMessage(); 
    m2.send( "ILOVEYOU"); 
    mgr.add(m2); 
  } 
   public  static  void main(String[] args){ 
    MessageManager mgr =  new MessageManager(); 
    init(mgr); //初始化 
    System.out.println(mgr.getClone(1).getContent()); 
     
  } 

 
 
 本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/229578,如需转载请自行联系原作者
相关文章
|
4月前
|
数据采集 Oracle 关系型数据库
我通过三个故事终于学明白了三种工厂模式
我通过三个故事终于学明白了三种工厂模式
66 0
|
4月前
|
算法
犯错总结--工厂模式和策略模式傻傻没分清
犯错总结--工厂模式和策略模式傻傻没分清
57 0
犯错总结--工厂模式和策略模式傻傻没分清
GOF之建造者模式(创建型模式)附图详解 ✨ 每日积累
GOF之建造者模式(创建型模式)附图详解 ✨ 每日积累
GOF之建造者模式(创建型模式)附图详解 ✨ 每日积累
|
Web App开发 JavaScript 前端开发
【重温基础】7.时间对象
【重温基础】7.时间对象
125 0
|
XML 存储 JSON
第一天:创建型模式--工厂方法模式
第一天:创建型模式--工厂方法模式
97 0
|
设计模式 Python
第二天:创建型模式--抽象工厂模式
第二天:创建型模式--抽象工厂模式
101 0
|
设计模式 Python
第三天:创建型模式--建造者模式
第三天:创建型模式--建造者模式
94 0
|
数据可视化 Python
第四天:创建型模式--原型模式
第四天:创建型模式--原型模式
127 0
艾伟_转载:疑惑?改良? 从简单工厂到工厂方法
  写在前面 最近一段时间在研究有关设计模式方面的文章,拜读了TerryLee以及吕震宇两位老师所写的设计模式方面的系列文章,收获颇丰,也让我对OOP,OOD有了新的理解和认识,不过在看到工厂方面的几篇文章时,却总有个地方想不通,望各位老师专家能替在下答疑解惑,以下是自己对工厂模式的一些理解以及提出的一种改良方案,不知道是否有人提出过类似的方案,如有雷同纯属巧合。
872 0
|
Java 设计模式
给女友讲讲设计模式——原型模式(JAVA实例)4
前言 上高中那阵子,特别迷恋火影,所以每周都会等着更新。最让我难忘的是里面的主人公鸣人,和他的各种各样炫酷的技能。他的影分身,一下子可以分离出来多个自己,并且这些自己的副本使用的技能都是相同的。
947 0