讲故事,学(Java)设计模式—原型模式

原型模式被用在频繁调用且极其相似的对象上,它会克隆对象并设置改变后的属性,而且消耗的资源较少。

1、原型模式类图

2、原型模式Java示例代码

package designpatterns.prototype;

//原型
interface Prototype {
    void setSize(int x);
    void printSize();
 }

// 一个具体类
class A implements Prototype, Cloneable {
    private int size;

    public A(int x) {
        this.size = x;
    }

    @Override
    public void setSize(int x) {
        this.size = x;
    }

    @Override
    public void printSize() {
        System.out.println("Size: " + size);
    }

    @Override
    public A clone() throws CloneNotSupportedException {
        return (A) super.clone();
    }
}

//需要很多类似的对象进行测试
public class PrototypeTest {
    public static void main(String args[]) throws CloneNotSupportedException {
        A a = new A(1);

        for (int i = 2; i < 10; i++) {
            Prototype temp = a.clone();
            temp.setSize(i);
            temp.printSize();
        }
    }
}

3、原型模式在Java标准函数库中的使用

java.lang.Object – clone()

 

原文链接: programcreek 翻译: ImportNew.com - 刘刚
译文链接: http://www.importnew.com/6907.html
[ 转载请保留原文出处、译者和译文链接。]

关于作者: 刘刚

(新浪微博:@Rubricate

查看刘刚的更多文章 >>



相关文章

发表评论

Comment form

(*) 表示必填项

7 条评论

  1. 刘刚 说道:

    我来回答一下吧
    原型模式消耗的资源较少。这其中原因何在?
    因为他直接复制的是对象的二进制,不是先new 对象再赋值

    Thumb up 2 Thumb down 0

  2. 观察 说道:

    看标题进来的, 故事呢?

    Thumb up 1 Thumb down 0

    • 刘刚 说道:

      这个是翻译的文章,原文就是只有3句话。可能这个模式不需要讲故事吧···

      Thumb up 1 Thumb down 1

  3. Wayne 说道:

    原型模式中还有涉及到浅克隆和深克隆。尽管克隆是复制原对象二进制,但是两者并不是“==”

    Thumb up 0 Thumb down 0

  4. shallrain 说道:

    说实话 感觉这段有点不符合题目。1.没故事 2.还是没说为何原型模式资源消耗少
    不是博主问题 是原文就没故事…不过原文也没说讲故事的事儿…希望博主能加一点自己的理解 给我这样的菜鸟多学习学习
    感谢翻译 感谢分享!

    Thumb up 0 Thumb down 0

  5. crazywen 说道:

    做了如下测试:
    public static void main(String args[]) throws CloneNotSupportedException {
    A a = new A(1);
    long start = System.currentTimeMillis();
    for (int i = 2; i < 10000000; i++) {
    Prototype temp = a.clone();
    temp.setSize(i);
    // temp.printSize();
    }
    System.out.println("clone:" + (System.currentTimeMillis() – start));
    start = System.currentTimeMillis();
    for (int i = 2; i < 10000000; i++) {
    Prototype temp = new A(i);
    // temp.printSize();
    }
    System.out.println("new:" + (System.currentTimeMillis() – start));
    }
    得出结果:
    clone:1484
    new:82
    似乎clone需要的时间更多呢,效率体现在哪?

    Thumb up 0 Thumb down 3

  6. Lucy 说道:

    “原型模式多用于创建复杂的或者耗时的实例”,在维基百科上看到的这句话应该可以回答楼上的问题。原型模式的应用应该是有一定的条件的

    Thumb up 0 Thumb down 0

跳到底部
返回顶部