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


     属于创建型模式

    针对批量对象的创建。


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

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


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

     

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

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

    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. }

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

     

  • 相关阅读:
    最新java基础部分面试题大全
    Prometheus TSDB存储原理
    SpringSecurity 全部
    开源大模型 Llama 3
    看门狗 WDG
    leetcode(力扣) 72. 编辑距离 (动态规划)
    基于Monkey的稳定性测试
    程序性能分析
    <C++>学习:类与对象
    随机分布模型
  • 原文地址:https://blog.csdn.net/m0_45877477/article/details/126692825