创建型---prototype模式

  • 代码:
 1 package com.design;
 2 import java.util.ArrayList;
 3
 4 /**
 5  *
 6  * @author Administrator
 7  *
 8  */
 9 class ConcretePrototype implements Cloneable {
10     /**
11      * 成员变量
12      * namelist 测试深拷贝
13      */
14     private ArrayList<String> nameList = new ArrayList<String>();
15
16     /**
17      * 构造函数
18      */
19     public ConcretePrototype() {
20       }
21
22     /**
23      * 添加name到namelist
24      * @param name
25      */
26     public void setName(String name) {
27         this.nameList.add(name);
28       }
29
30      /**
31       *  获取namelist
32       * @return
33       */
34      public ArrayList<String> getNameList() {
35         return this.nameList;
36       }
37
38      /**
39       * 覆盖Object基类中的clone()方法,并扩大该方法的访问权限,具体化返回本类型
40       */
41      public ConcretePrototype clone() {
42
43         ConcretePrototype self = null;
44         try
45         {
46             self = (ConcretePrototype) super.clone();
47             ///以下这句是实现深拷贝的关键
48             self.nameList = (ArrayList<String>) this.nameList.clone();
49         }
50         catch(CloneNotSupportedException e)
51         {
52             e.printStackTrace();
53         }
54
55         return self;
56       }
57 }
58
59 //测试类
60 public class Test {
61       public static void main(String[] args) {
62         ConcretePrototype prototype = new ConcretePrototype();
63         prototype.setName("蚂蚁 ...");
64         System.out.println("prototype : " + prototype.getNameList());
65
66         ///通过clone获得一个拷贝
67         ConcretePrototype fromClone = prototype.clone();
68         fromClone.setName("小蚂蚁 ...");
69         System.out.println("fromClone : " + fromClone.getNameList());
70         System.out.println("prototype : " + prototype.getNameList());
71       }
72 }
  • 结果:

prototype : [蚂蚁 ...]
fromClone : [蚂蚁 ..., 小蚂蚁 ...]
prototype : [蚂蚁 ...]

时间: 2024-10-06 00:29:18

创建型---prototype模式的相关文章

创建型—原型模式

1.原型模式意图: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.场景描述: 原型模式,利用实例自身的克隆功能来得到与原实例相同的新的实例. 设想西游记中的一个场景,唐僧师徒四人(白龙马除外),不过,该唐僧是个多事.喜欢使唤徒弟的唐僧.每当有事时,唐僧便会使唤他的三个徒弟去做.但是三个徒弟尽职尽责,为了保护师傅,必须留在唐僧身边.此时,多亏了三个徒弟能够千变万化,且都可通过毛发来变作自身(八戒.沙僧不知是否具有此功能?暂时看做有吧).当唐僧需要洗衣.化斋.喝水.探路.借宿

创建型-生成器模式(Builder)

1.意图: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2.场景描述: 编辑软件的“另存为”功能便是生成器模式的一个体现.例如,Word的另存为功能,可以选择将文件存储为doc.docx.pdf.txt等格式,但是通过word的另存为功能转变文档的存储格式时都采用了“文件 --> 另存为”,相同的创建过程.当需要对word支持新的类型转换时,例如,添加*.newtype类型的转换,此时只需在“另存为”对话框的“选择存储类型”中添加一行"*.newtype&q

JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)

简单工厂模式尽管简单,但存在一个非常严重的问题.当系统中须要引入新产品时,因为静态工厂方法通过所传入參数的不同来创建不同的产品,这必然要改动工厂类的源码,将违背"开闭原则".怎样实现添加新产品而不影响已有代码?工厂方法模式应运而生,本文将介绍另外一种工厂模式--工厂方法模式. 1 日志记录器的设计 Sunny软件公司欲开发一个系统执行日志记录器(Logger).该记录器能够通过多种途径保存系统的执行日志,如通过文件记录或数据库记录,用户能够通过改动配置文件灵活地更换日志记录方式. 在设

设计模式之创建型工厂模式

通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例.创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象.定义一个创建对象的接口,让其子类决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行,最终生成复杂对象.主要解决接口选择的问题. 您需要一辆汽车,可以直接从工厂里提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现. var PageFactory = function(type, content) { if(this instan

设计模式-创建型-原型模式

引言: 原型模式是什么?它是在什么场景下被提出的呢?本章节,我们将详细了解下原型模式. 在软件系统中,当创建一个类的实例过程过于昂贵或复杂,并且我们需要创建多个这样类的实例时,如果我们通过new来创建类实例,这就会增加创建类的复杂度和创建过程与客户代码复杂的耦合度.如果采用工厂模式来创建这样的实例对象的话,随着产品类的不断增加,导致子类的数量不断增多,也导致了相应工厂类的增加,维护的代码维度增加了,因为有产品和工厂两个维度了,反而增加了系统复杂程度,所以在这里使用工厂模式来封装类创建过程并不合适

06.创建型————原型模式

package Create.e.Prototype; //原型业务类 需要实现克隆接口 public class Dog implements Cloneable{ public int legCounts; public Dog(int legCounts){ this.legCounts = legCounts; } public void changeLegCounts(){ this.legCounts *= 2; } public String toString(){ return

设计模式-创建型-工厂模式

工厂设计模式: 顾名思义,该模式是用来生产对象的.在面向对象的设计模式中,万物皆对象,若使用new来创建对象,就会对该对象产生强耦合,加入我们需要更换该对象,那么使用该对象的对象都需要进行修改,这显然违背了开闭原则(OCP).如果我们使用工厂来产生对象,我们只需要与这个工厂打交道就可以了,无需关心具体的对象,达到解耦的目的. 接下来我们从实际的案例出发,从无工厂到有工厂的区别. 去披萨店订购披萨,首先披萨的种类很多(CheesePizza.GreekPizza.DurianPizza{等),披萨

04.创建型————创建者模式

package Create.d.Builder; //业务接口 public interface Tax { void calcTax(); } package Create.d.Builder; //业务接口 public interface Salary { void calcSalary(); } package Create.d.Builder; //业务实现类 public class HeBeiTax implements Tax { @Override public void c

十四、原型模式Prototype(创建型模式)

1:原型模式的本质 原型模式的本质:克隆生成对象. 克隆是手段,目的还是生成新的对象实例.正是因为原型的目的是为了生成新的对象实例,原型模式通常是被归类为创建型的模式. 原型模式也可以用来解决"只知接口而不知实现的问题",使用原型模式,可以出现一种独特的"接口造接口"的景象,这在面向接口编程中很有用.同样的功能也可以考虑使用工厂来实现. 另外,原型模式的重心还是在创建新的对象实例,至于创建出来的对象,其属性的值是否一定要和原型对象属性的值完全一样,这个并没有强制规定