码迷,mamicode.com
首页 > 编程语言 > 详细

Java 原始模型(Prototype)模式

时间:2019-03-18 01:09:25      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:复制   接口   amp   java   idt   set   main   ext   sys   

一、什么是原型模式:

通过给出一个原型对象指明所要创建的对象的类型,然后通过复制这个原型对象来获取的更多的同类型的对象。

在Java语言中,支持原型模式,所有的对象都继承自Object对象,Object类提供一个clone()方法,它可以将JavaBean复制一份。所有要复制对象的类都要继承Cloneble接口,并实现继clone()方法才可以通过复制来获取自身更过的对象。如果一个对象没有实现Cloneble接口,则会抛出CloneNotSupportedException异常。

二、原型模型结构示意图:

 

 

技术图片

  实现clone()方法;继承Colneable接口。

三、克隆模型的特点:

  1.克隆对象与原对象不是一个对象。

  2.克隆对象与原对象的类型是一个类型。

  3.如果equal方法重载继承重写,x.clone().equal(x)结果为true。

 1 /**
 2  * 一个商品类
 3  *
 4  * @author ZhouDX
 5  * @since 2019/3/14 22:16:15
 6  */
 7 public class Product implements Cloneable {
 8     /**
 9      * 构造函数
10      */
11     public Product(String prouductId, String prouductName, String price) {
12         this.prouductId = prouductId;
13         this.prouductName = prouductName;
14         this.price = price;
15     }
16 
17     /**
18      * 构造函数
19      */
20     public Product(String prouductId, String prouductName) {
21         this.prouductId = prouductId;
22         this.prouductName = prouductName;
23         this.price = "0";
24     }
25 
26     /**
27      * 商品id
28      */
29     private String prouductId;
30     /**
31      * 商品id
32      */
33     private String prouductName;
34     /**
35      * 价格
36      */
37     private String price;
38 
39     public String getProuductId() {
40         return prouductId;
41     }
42 
43     public void setProuductId(String prouductId) {
44         this.prouductId = prouductId;
45     }
46 
47     public String getProuductName() {
48         return prouductName;
49     }
50 
51     public void setProuductName(String prouductName) {
52         this.prouductName = prouductName;
53     }
54 
55     public String getPrice() {
56         return price;
57     }
58 
59     public void setPrice(String price) {
60         this.price = price;
61     }
62 
63     @Override
64     protected Object clone() {
65         Product productClone = new Product(prouductId, prouductName);
66         productClone.setPrice(price);
67 
68         return productClone;
69     }
70 
71     @Override
72     public boolean equals(Object o) {
73         if (this == o) {
74             return true;
75         }
76         if (!(o instanceof Product)) {
77             return false;
78         }
79         Product product = (Product) o;
80         return Objects.equals(getProuductId(), product.getProuductId()) && Objects.equals(getProuductName(), product.getProuductName()) && Objects.equals(getPrice(), product.getPrice());
81     }
82 
83     @Override
84     public String toString() {
85         return "Product{" + "prouductId=‘" + prouductId + ‘\‘‘ + ", prouductName=‘" + prouductName + ‘\‘‘ + ", price=‘" + price + ‘\‘‘ + ‘}‘;
86     }
87 
88     public static void main(String[] args) {
89         Product product = new Product("201903142226", "钢铁侠", "500");
90 
91         Product productClone = (Product) product.clone();
92 
93         System.out.println("productClone:\n" + productClone);
94         System.out.println("product==productClone?:" + product.equals(productClone));
95         System.out.println("product.getClass()==productClone.getClass()?:" + product.getClass().equals(productClone.getClass()));
96         System.out.println("product.clone().equals(product)?"+product.clone().equals(product));
97     }
98 }

  运行结果:

技术图片

 

三、原始模型的分类:

简单原始模型:

技术图片

Prototype(抽象原始模型角色):抽象类或者一个接口,给出具体模型需要的接口。

ConcretePrototype(具体原始模型角色):继承抽象原型模型角色,被复制的对象。

Client(客户端):提出复制请求。

/**
 * 抽象原始模型角色
 *
 * @author ZhouDX
 * @since 2019/3/14 22:12:10
 */
public interface Prototype extends Cloneable {

    Prototype clone();
}

 

Java 原始模型(Prototype)模式

标签:复制   接口   amp   java   idt   set   main   ext   sys   

原文地址:https://www.cnblogs.com/zhoudaxing/p/10534282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!