22种设计模式——原型模型

1. 概念

原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类,即无需关心复杂的复制逻辑。
在这里插入图片描述

  • 目的:根据一个已有的对象,创建出另外一个一模一样的对象。

  • 解决的问题:复杂的复制逻辑
    如果你有一个对象, 并希望生成与其完全相同的一个复制品, 你该如何实现呢? 首先, 你必须新建一个属于相同类的对象。 然后, 你必须遍历原始对象的所有成员变量, 并将成员变量值复制到新对象中。

    不错! 但有个小问题。 并非所有对象都能通过这种方式进行复制, 因为有些对象可能拥有私有成员变量, 它们在对象本身以外是不可见的
    在这里插入图片描述
    直接复制还有另外一个问题。 因为你必须知道对象所属的类才能创建复制品, 所以代码必须依赖该类。 即使你可以接受额外的依赖性, 那还有另外一个问题: 有时你只知道对象所实现的接口, 而不知道其所属的具体类,比如接口有多个实现类,而你不知道要复制的对象使用的是哪个实现类。


2. 特点

  • 优点
    1. 可以克隆对象, 而无需与它们所属的具体类相耦合。
    2. 可以克隆预生成原型, 避免反复运行初始化代码。
    3. 可以更方便地生成复杂对象(比如有多个属性),使用原型模式就不必一一获取再设置。
    4. 可以用继承以外的方式来处理复杂对象的不同配置。
  • 缺点:克隆包含循环引用的复杂对象可能会非常麻烦(深拷贝)
  • 适用场景
    1. 如果你需要复制一些对象,但这个对象的构建比较复杂,使用原型模式就可以无视这种复杂的逻辑直接复制。

    2. 如果子类的区别仅在于其对象的初始化方式, 那么你可以使用该模式来减少子类的数量。 别人创建这些子类的目的可能是为了创建特定类型的对象。

      在原型模式中, 你可以使用一系列预生成的、 各种类型的对象作为原型。客户端不必根据需求对子类进行实例化, 只需找到合适的原型并对其进行克隆即可。类似模具的作用~


3. 实现

在讲原型模式之前,先模拟一下普通做法是怎么复制一个对象的,在这种做法下,有两个角色:

  • 原型类:被复制的对象
  • 客户端:调用复制方法的一端,复制操作也由客户端实现
/**
 * 客户端
 */
class client{
   
    /**
     * 复制方法
     * @param test 原型对象
     */
    void copy(Test test){
   
        //new一个对象
        Test newTest = new Test();
        //根据原型对象注入属性
        newTest.setValue(test.getValue());
    }
    
	public static void main(String[] args) throws CloneNotSupportedException {
   
	        Test test = new Test();
	        test.setValue(10);
	        
	        Test clone = copy(test);
	        System.out.println(clone.getValue())
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值