• java设计模式-原型模式


      第一次好好的看设计模式,可能有不对的地方,大佬们可以下面指出,感谢!

      ----------- 分割线 ----------

      简历复印——原型模式

      简历复印,一个复制过程,原型模式即一个复制过程。

    UML图:

    Prototype:抽象接口,定义一个可以复制自己的方法;
    ConcretePrototype1:Prototype的具体实现;
    ConcretePrototype2:Prototype的具体实现;
    Client:具体调用


    使用场景:在代码中需要复制一个对象,尤其是深复制,不可使用object.clone的时候,原型模式派上用场;浅复制,不能让外部修改对象里面属性时,可使用浅复制。

    Prototype类:

    实现类:

    程序调用:

    这个位置克隆的是copyOne,可以看出每次都是不同的copyOne,实现了原型复制;

    克隆copyTwo:

    哪个实现类克隆,就是克隆哪个对象,简单原型模式这样就实现了。

    升级版——Cloneable :

    程序调用:

    这个时候有个问题,如果我的简历对象里面还包含了一个对象呢,也能复制过去吗?原型模式中的浅复制和深复制:浅复制——只复制对象本身属性,不复制锁包含对象;深复制——不仅复制了属性,而且复制了里面所包含对象(当然需要自己实现);先到这了,饿了,吃饭了,回头补充深复制和浅复制。

     浅复制,简历类里面新增一个履历类:

    这时候程序调用:

    发现只需要修改了履历这个对象,其他类里面的履历对象属性跟着改变,原因是浅复制只是复制了对象里面所包含对象的引用,都是同一个对象,所以哪里改变了,就会都跟着改变!

    深复制:

    Experience类也实现Cloneable ,修改简历类的clone方法:

    程序调用:

    这时候,第一个简历里面的履历类并没有被更改,完成深复制。

  • 相关阅读:
    网络流相关题目
    【洛谷P3119】[USACO15JAN]草鉴定Grass Cownoisseur
    【洛谷八连测R6】yanQval-透明的星尘
    【洛谷八连测R6】yanQval-分离丧失的既视感
    【洛谷八连测R6】yanQval-不可逆的重启动
    【洛谷P2700】逐个击破
    【洛谷八连测R5】whzzt-Confidence
    【洛谷八连测R5】whzzt-Warmth
    【洛谷八连测R5】whzzt-Conscience
    【NOIP模拟赛】
  • 原文地址:https://www.cnblogs.com/ghsy/p/11101961.html
Copyright © 2020-2023  润新知