• 设计模式 原型模式来复制女朋友


     属于创建型模式

    针对批量对象的创建。


    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。


    原型模式将克隆过程委派给被克隆的对象。即由被克隆的对象负责自己的克隆。

     

    比如你现在有一个女朋友,你觉得不够用,你还想再要一个,一个陪你玩,一个给你做家务,那么你就可以通过原型模式来复制多个女朋友。

    创建一个接口,里面写复制的方法。

    1. package com.qing.clone;
    2. public interface IYuanxing {
    3. Object copy();
    4. }

    女朋友类写一个构造方法,参数传要复制的女朋友。

    女朋友类实现接口,重写复制的方法(new 一个女朋友对象,参数传女朋友自己,return)。

    女朋友类里复制的属性不要写set方法,就只get就行。

    1. package com.qing.clone;
    2. public class GirlFriend implements IYuanxing{
    3. private String face;
    4. private String body;
    5. //参数是要复制的女朋友
    6. public GirlFriend(GirlFriend girlFriend) {
    7. this.face = girlFriend.face;
    8. this.body = girlFriend.body;
    9. }
    10. public GirlFriend() {
    11. }
    12. public GirlFriend(String face, String body) {
    13. this.face = face;
    14. this.body = body;
    15. }
    16. public String getFace() {
    17. return face;
    18. }
    19. public String getBody() {
    20. return body;
    21. }
    22. //copy方法,复制自己
    23. @Override
    24. public Object copy() {
    25. return new GirlFriend(this);
    26. }
    27. }

    测试

    1. package com.qing.clone;
    2. public class Test1 {
    3. public static void main(String[] args) {
    4. GirlFriend girlFriend1 = new GirlFriend("圆脸","身材匀称");
    5. System.out.println(girlFriend1.getFace()+" "+girlFriend1.getBody());
    6. GirlFriend girlFriend2 = new GirlFriend(girlFriend1);
    7. System.out.println(girlFriend2.getFace()+" "+girlFriend2.getBody());
    8. System.out.println(girlFriend1);
    9. System.out.println(girlFriend2);
    10. }
    11. }

    然后你就得到了两个一样长相的的女朋友,她两还不是同一个。

    接下来,你觉得女盆友多了得区分一下,她们的长相可以一样,名字要区分开。

    重写复制的方法还和之前一样,但是因为名字要区分,名字单独添加了set方法

    1. package com.qing.clone;
    2. public class GirlFriendNameDiff implements IYuanxing {
    3. private String face;
    4. private String body;
    5. private String name;
    6. //参数是要复制的女朋友,复制 脸 和 身材
    7. //名字不复制,名字要不一样
    8. public GirlFriendNameDiff(GirlFriendNameDiff girlFriend) {
    9. this.face = girlFriend.face;
    10. this.body = girlFriend.body;
    11. }
    12. public GirlFriendNameDiff(String face, String body) {
    13. this.face = face;
    14. this.body = body;
    15. }
    16. public String getName() {
    17. return name;
    18. }
    19. public void setName(String name) {
    20. this.name = name;
    21. }
    22. public String getFace() {
    23. return face;
    24. }
    25. public String getBody() {
    26. return body;
    27. }
    28. //copy方法,复制自己
    29. @Override
    30. public Object copy() {
    31. return new GirlFriendNameDiff(this);
    32. }
    33. @Override
    34. public String toString() {
    35. return "GirlFriendNameDiff{" +
    36. "face='" + face + '\'' +
    37. ", body='" + body + '\'' +
    38. ", name='" + name + '\'' +
    39. '}';
    40. }
    41. }

    测试看一下

    1. @Test
    2. void test1() {
    3. GirlFriendNameDiff girlFriend1 = new GirlFriendNameDiff("鹅蛋脸","苗条");
    4. girlFriend1.setName("小美");
    5. GirlFriendNameDiff girlFriend2 = new GirlFriendNameDiff(girlFriend1);
    6. girlFriend2.setName("小红");
    7. GirlFriendNameDiff girlFriend3 = new GirlFriendNameDiff(girlFriend1);
    8. girlFriend3.setName("小可");
    9. System.out.println(girlFriend1);
    10. System.out.println(girlFriend2);
    11. System.out.println(girlFriend3);
    12. }

    得到了长相一样,名字不一样的女朋友

     

  • 相关阅读:
    Nginx(六) Nginx location 匹配顺序及优先级深究(亲测有效)
    V8中的快慢属性(图文分解更易理解)
    ELK 日志收集
    PyQt 信号与槽之多窗口数据传递(Python)
    k8s 中的 ingress 使用细节
    【Qt】桌面应用开发 | 绘图事件和绘图设备 |文件操作
    java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展
    Java代码对Excel文件得的处理
    基于B/S机场飞机票网上订票管理系统【Java毕业设计·安装调试·代码讲解·文档报告】
    “回车”、“换行”浅谈
  • 原文地址:https://blog.csdn.net/m0_45877477/article/details/126692825