慢慢说设计模式:原型模式

小Q:什么是设计模式

慢慢:设计模式是系统服务设计中针对常见场景的一种解决方案,可以解决功能逻辑开发中遇到的共性问题。设计模式并不局限最终的实现方案,而是在这种概念模式下,解决系统设计中的代码逻辑问题。


小Q:什么是原型模式

慢慢:原型模式主要解决创建重复时繁琐的问题。该模式实现了一个接口,用于创建当前的对象的克隆,避免了我们在创建时需要重新赋值等问题。


小Q:赶快上代码!

慢慢:好的,我们来模拟克隆图形。

// 可克隆的图形抽象类
public abstract class Shape implements Cloneable {
    protected String id;
    protected String type;
    
    abstract void draw();
    
    public String getType() {
        return type;
    }
    
    
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
    }
}

public Shape clone() {
    Shape clone = null;
      try {
         clone = (Shape) super.clone();
      } catch (CloneNotSupportedException e) {
         e.printStackTrace();
      }
      return clone;
}

具体图形:

public class Rectangle extends Shape {
   public Rectangle(){
     type = "Rectangle";
   }
 
   @Override
   public void draw() {
      System.out.println(type);
   }
}

---

public class Square extends Shape {
   public Square(){
     type = "Square";
   }
 
   @Override
   public void draw() {
      System.out.println(type);
   }
}

克隆对象

public class Demo {
    public static void main(String[] args) {
        Circle circle = new Circle();
        circle.setId("1");
        Circle circleClone = circle.clone();  // 克隆出相同的对象
        
        Square square = new Square();
        square.setId("2");
        Square squareClone = square.clone();  // 克隆出相同的对象
    }
}

小Q:这种模式的优缺点是什么?

慢慢:原型模式的优点包括:便于创建复杂对象,避免重复初始化。缺点:如果对象种包括了循环引用的复制,以及类种深度使用对象的复制,都会让这种思路的代码逻辑变得异常复杂。

上一篇:如何实现自适应的九宫格?


下一篇:请定义一个square_of_sum()函数,它接收一个list,返回list中每个元素平方的和。