设计模式之原型模式案例代码
2014-03-07 15:05
946 查看
转载请注明出处:http://blog.csdn.net/droyon/article/details/20709827
原型模式:用原型实例指定对象的种类,并且通过拷贝这些原型创建新的对象。
类图如下:
我们都知道通过如下代码不能创建新对象,他们都指向同一个对象。
案例代码:
Domesticrobots.java
Main.java
打印结果如下:
如果想批量生产家务机器人,我们可以通过原型模式。
为了能够clone生产家务机器人,我们让家务机器人实现clone的接口。
ICloneRobots.java
改动后的Domesticrobots类:
测试代码:
Main.java
原型模式可以让你从一个对象再创建另一个对象,并且新创建对象不需要知道创建的细节。
原型模式:用原型实例指定对象的种类,并且通过拷贝这些原型创建新的对象。
类图如下:
我们都知道通过如下代码不能创建新对象,他们都指向同一个对象。
案例代码:
Domesticrobots.java
/** * 家务机器人 * @author wanghl * */ public class Domesticrobots { private String mName; private String mVersion; public Domesticrobots(String name,String version){ mName = name; mVersion = version; } @Override public String toString() { return "Domesticrobots [mName=" + mName + ", mVersion=" + mVersion + "]"+super.toString(); } }
Main.java
public class Main { public static void main(String args[]){ Domesticrobots robots1 = new Domesticrobots("家务机器人1", "终结者1代"); Domesticrobots robots2 = robots1; Domesticrobots robots3 = robots1; System.out.println(robots1); System.out.println(robots2); System.out.println(robots3); } }
打印结果如下:
Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@3ce53108 Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@3ce53108 Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@3ce53108
如果想批量生产家务机器人,我们可以通过原型模式。
为了能够clone生产家务机器人,我们让家务机器人实现clone的接口。
ICloneRobots.java
public interface IRobotsClone<T> { public T clone(); }
改动后的Domesticrobots类:
/** * 家务机器人 * @author wanghl * */ public class Domesticrobots implements IRobotsClone<Domesticrobots>{ private String mName; private String mVersion; public Domesticrobots(String name,String version){ mName = name; mVersion = version; } @Override public String toString() { return "Domesticrobots [mName=" + mName + ", mVersion=" + mVersion + "]"+super.toString(); } public Domesticrobots clone(){ return new Domesticrobots(mName, mVersion); } }
测试代码:
Main.java
public class Main { public static void main(String args[]){ Domesticrobots robots1 = new Domesticrobots("家务机器人1", "终结者1代"); Domesticrobots robotsII = robots1.clone(); Domesticrobots robotsIII = robots1.clone(); System.out.println(robots1); System.out.println(robotsII); System.out.println(robotsIII); } }打印结果:
Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@6af62373 Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@459189e1 Domesticrobots [mName=家务机器人1, mVersion=终结者1代]Domesticrobots@55f33675我们看到,我们的robotsII以及robotsIII都是不同的对象。
原型模式可以让你从一个对象再创建另一个对象,并且新创建对象不需要知道创建的细节。
相关文章推荐
- [设计模式](四):建造者模式(Builder)与原型模式(Prototype)[含Kotlin深克隆实例代码]
- 设计模式讲解与代码实践(四)——原型
- 项目管理大法归档 - 思维导图、原型工具、接口测试、设计模式、版本管理、单元测试、持续集成、代码审查、Bug 跟踪
- 设计模式----原型模式(Prototype)UML和实现代码
- 设计模式之原型模式代码示例
- 设计模式案例代码之外观模式
- 设计模式之简单工厂模式学习案例代码
- 如何编写优雅的代码:06. 设计模式应用案例(上)
- 【怎样写代码】对象克隆 -- 原型模式(一):问题案例
- php设计模式 Prototype (原型模式)代码
- 设计模式之状态模式案例代码
- 设计模式---原型(C++代码实现)
- 如何编写优雅的代码:07. 设计模式应用案例(下)
- 用代码和UML图化解设计模式之《桥接模式》
- 设计模式之原型模式
- 设计模式 - 原型模式(Prototype)
- 设计模式---- 单例模式 工厂模式 构造函数模式 原型模式 混合模式
- 页面代码文件多大合适?有感于页面原型设计
- 设计模式(六)原型模式(Prototype Pattern)