设计模式4-原型模式

1. 概念

     原型模式(Prototype Pattern)是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而不是通过实例化类来创建。这种模式适用于对象的创建成本较高,或者对象的创建过程比较复杂,但新创建的对象只需要与现有对象稍有差异的情况。

核心概念

原型模式的核心是一个原型对象,它是被复制的对象,该对象作为新对象的模板。通过克隆原型对象,可以得到一个新的对象,新对象的创建过程由原型对象完成,因此不需要知道具体的实例化细节。

原型模式(Prototype Pattern)是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而不是通过实例化类来创建。这种模式适用于对象的创建成本较高,或者对象的创建过程比较复杂,但新创建的对象只需要与现有对象稍有差异的情况。

核心概念

原型模式的核心是一个原型对象,它是被复制的对象,该对象作为新对象的模板。通过克隆原型对象,可以得到一个新的对象,新对象的创建过程由原型对象完成,因此不需要知道具体的实例化细节。

结构

原型模式通常包含以下几个角色:

  • 抽象原型类(Prototype):声明一个克隆自身的接口方法,用于复制生成新对象。
  • 具体原型类(Concrete Prototype):实现抽象原型类的接口方法,以便复制自身并生成新对象。
  • 客户端(Client):使用原型对象的客户端,在需要创建新对象时,通过克隆原型对象来得到新的实例。

2. 示例 

 下面给出一个使用Java实现的原型模式的示例。在这个示例中,我们将创建一个简单的图形类 Shape,并通过原型模式来克隆这些图形对象。

Shape 类定义

首先定义一个抽象的 Shape 类,作为图形对象的原型,其中包含抽象的 clone 方法用于复制图形对象。

// 抽象原型类 Shape
public abstract class Shape implements Cloneable {

    private String type;

    public abstract void draw();

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    // 克隆方法
    @Override
    public Shape clone() {
        Shape clone = null;
        try {
            clone = (Shape) super.clone(); // 浅拷贝
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}

具体图形类

然后创建具体的图形类,例如 CircleRectangle,这些类继承自 Shape 类并实现具体的 draw 方法。

// 具体图形类 Circle
public class Circle extends Shape {

    public Circle() {
        setType("Circle");
    }

    @Override
    public void draw() {
        System.out.println("Inside Circle::draw() method.");
    }
}

// 具体图形类 Rectangle
public class Rectangle extends Shape {

    public Rectangle() {
        setType("Rectangle");
    }

    @Override
    public void draw() {
        System.out.println("Inside Rectangle::draw() method.");
    }
}

客户端代码

最后,在客户端代码中使用原型模式来克隆图形对象,并调用相应的方法。

public class Client {

    public static void main(String[] args) {

        // 创建原型图形对象
        Shape circle = new Circle();
        Shape rectangle = new Rectangle();

        // 克隆图形对象
        Shape clonedCircle = circle.clone();
        Shape clonedRectangle = rectangle.clone();

        // 使用克隆对象
        System.out.println("Original Circle Type: " + circle.getType());
        circle.draw();
        System.out.println("Cloned Circle Type: " + clonedCircle.getType());
        clonedCircle.draw();

        System.out.println("Original Rectangle Type: " + rectangle.getType());
        rectangle.draw();
        System.out.println("Cloned Rectangle Type: " + clonedRectangle.getType());
        clonedRectangle.draw();
    }
}

在上面的示例中,我们首先创建了 CircleRectangle 类作为具体的图形类,它们都继承自 Shape 抽象类,并实现了 draw 方法。然后,在客户端代码中,我们创建了原型图形对象 circlerectangle,并通过调用它们的 clone 方法来克隆得到 clonedCircleclonedRectangle。最后,我们通过使用克隆对象来调用相应的 draw 方法,验证了原型模式的使用。

在实际应用中,原型模式可以帮助我们在不直接实例化对象的情况下创建新对象,通过克隆已有对象来节省资源和时间,同时保持对象的状态独立性。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值