前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >复习:GoF的23种设计模式之Prototype模式(创建型)

复习:GoF的23种设计模式之Prototype模式(创建型)

作者头像
营琪
发布2019-12-25 16:08:10
3150
发布2019-12-25 16:08:10
举报
文章被收录于专栏:营琪的小记录营琪的小记录

闲扯一下,我们都吃过月饼吧,那大家知道月饼是怎么制作出来的吗?(以前的工艺)

我小时候有经历过月饼的制作,提前买好面粉、糖、摸具、鸭蛋黄等,将面粉揉成团然后再用杆搓成面皮,将鸭蛋黄、糖配料什么的一股脑的卷成一团,用面皮包裹好,再使用模具整好形状,烤至金黄,出锅开吃。

Prototype模式(原型)

上面讲的使用模具整理好月饼,也可以看做一个原型模式,我们制作模具的过程,就已经完成了一个形状满意的月饼,后面制作月饼都和前一个类似。

原型模式定义:通过“复制”一个已经存在的实例来返回新的实例,而不是新键实例。被复制的实例就是我们称的“原型”。

  1. 复制一个实例相比new一个实例更加高效;
  2. 对于创建复制的对象或者说是几个类整合到一起的对象,更加方便;

示例代码

代码语言:javascript
复制
public class PrototypeTest {
    public static void main(String[] args) {
        PrototypeManage manage = new PrototypeManage();
        Prototype prototype1 = new Mooncake("月饼");
        manage.register("月饼",prototype1);
        //通过原型创建新对象。
        Prototype prototype2 = manage.create("月饼");
        prototype2.user();
        System.out.println(prototype1 == prototype2);//false
    }
}

interface Prototype extends Cloneable {
    public abstract void user();
    public abstract Prototype createClone();
}
class Mooncake implements Prototype{
    String str = null;
    public Mooncake(String s) {
        this.str = s;
    }
    public void user() {
        System.out.println("这是一个复杂的"+str);
    }
    public Prototype createClone() {
        Prototype prototy = null;
        try {
            prototy = (Prototype) clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return prototy;
    }
}

class PrototypeManage {
    Map<String, Prototype> map = new HashMap<String, Prototype>();
    public void register(String name, Prototype prototype) {
        map.put(name, prototype);
    }
    public Prototype create(String prototypeName) {
        Prototype clone = map.get(prototypeName).createClone();
        return clone;
    }
}

UML类图

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Prototype模式(原型)
  • 示例代码
    • UML类图
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档