二十三种设计模式全面解析-原型模式进阶之原型管理器:集中管理对象原型的设计模式之道

这篇具有很好参考价值的文章主要介绍了二十三种设计模式全面解析-原型模式进阶之原型管理器:集中管理对象原型的设计模式之道。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在软件开发中,我们经常需要创建和复制对象。然而,有时候直接创建对象可能会导致性能下降或代码重复。为了解决这些问题,原型模式应运而生。而使用原型管理器(Prototype Manager)来集中管理原型对象可以进一步提高灵活性和可维护性。本文将详细介绍原型管理器的用途、与其他设计模式的结合实践,并重点讨论处理深克隆和浅克隆的问题。


一、原型管理器的作用与实践


原型管理器是一个中心化的存储库,用于管理和提供原型对象的克隆副本。它能够集中管理多个原型对象,并提供一种简单的方式来获取和复制这些对象。这种集中化的管理方式带来了以下优点:

  • 提高创建对象的效率:通过原型管理器,我们可以在需要时直接克隆原型对象,避免了重复创建对象的开销。
  • 简化对象创建过程:原型管理器将创建对象的过程集中在一处,使得创建逻辑更加清晰,代码更易维护。
  • 促进对象的复用:原型管理器可以在不同的场景中重复使用原型对象,提高了代码的可扩展性和可维护性。

为了更好地理解原型管理器的实践,让我们结合工厂方法模式和单例模式来演示其用法。


1、创建原型接口和具体原型类

首先,我们定义一个原型接口 Prototype,其中包含 clone 方法用于克隆对象。

public interface Prototype extends Cloneable {
    Prototype clone();
}

然后,我们创建具体的原型类 ConcretePrototype1ConcretePrototype2,它们实现了 Prototype 接口并重写了 clone 方法。

public class ConcretePrototype1 implements Prototype {
    @Override
    public Prototype clone() {
        try {
            return (ConcretePrototype1) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}

public class ConcretePrototype2 implements Prototype {
    @Override
    public Prototype clone() {
        try {
            return (ConcretePrototype2) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}

2、创建原型管理器

接下来,我们创建原型管理器 PrototypeManager,它负责集中管理原型对象并提供克隆副本。

import java.util.HashMap;
import java.util.Map;

public class PrototypeManager {
    private static Map<String, Prototype> prototypes = new HashMap<>();

    public static void registerPrototype(String key, Prototype prototype) {
        prototypes.put(key, prototype);
    }

    public static Prototype clonePrototype(String key) {
        Prototype prototype = prototypes.get(key);
        if (prototype != null) {
            return prototype.clone();
        }
        return null;
    }
}

在上述代码中,PrototypeManager 使用一个 Map 数据结构来存储原型对象,其中键是对象的标识符,值是原型对象本身。
registerPrototype 方法用于注册原型对象,将其添加到管理器中。
clonePrototype 方法根据指定的键来获取对应的原型对象,并通过克隆方法创建并返回一个克隆副本。


3、使用原型管理器和其他设计模式的实践

原型管理器与其他设计模式的结合使用可以增强系统的灵活性和可扩展性。

下面以工厂方法模式和单例模式为例,演示如何结合这些模式来使用原型管理器。

首先,我们创建一个工厂类 ProductFactory,它使用原型管理器来创建产品对象。

public class ProductFactory {
    public static Product createProduct(String type) {
        Prototype prototype = PrototypeManager.clonePrototype(type);
        if (prototype instanceof Product) {
            return (Product) prototype;
        }
        return null;
    }
}

在上述代码中,ProductFactory 中的 createProduct 方法根据传入的类型(键),通过原型管理器获取对应的原型对象,并将其转换为产品对象。


接下来,我们创建一个单例类 Application,它使用工厂方法来创建产品对象。

public class Application {
    private static Application instance = new Application();

    private Application() {}

    public static Application getInstance() {
        return instance;
    }

    public void run() {
        Product product = ProductFactory.createProduct("Type1");
        if (product != null) {
            product.doSomething();
        }
    }
}

在上述代码中,Application 是一个单例类,通过 getInstance 方法获取唯一的实例。在 run 方法中,我们使用工厂方法创建产品对象,并调用其方法。


二、处理深克隆和浅克隆的问题

在使用原型模式时,我们常常需要考虑克隆对象的属性类型。默认情况下,克隆操作是浅克隆,即只复制基本类型的属性值,而引用类型的属性仍然指向相同的对象。这可能导致在修改克隆对象时,原对象的引用类型属性也会受到影响。


为了解决这个问题,我们可以在具体原型类中进行深克隆的处理。深克隆会复制引用类型属性所指向的对象,从而确保克隆对象和原对象的引用类型属性指向不同的对象。


下面是一个修改后的代码示例,展示了如何处理深克隆和浅克隆的问题:

public class ConcretePrototype1 implements Prototype {
    private String name;
    private List<String> list;

    public ConcretePrototype1(String name, List<String> list) {
        this.name = name;
        this.list = list;
    }

    // 深克隆
    @Override
    public Prototype clone() {
        try {
            ConcretePrototype1 clone = (ConcretePrototype1) super.clone();
            clone.list = new ArrayList<>(list);  // 创建新的列表对象并复制原列表的元素
            return clone;
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
    
    // 省略其他方法和属性
}

在上述代码中,ConcretePrototype1 类中添加了一个名为 list 的引用类型属性,并在 clone 方法中进行了深克隆。


总结:

原型管理器是一种有助于集中管理对象原型的设计模式,它能够提高对象创建的效率和代码的可维护性。通过与其他设计模式的结合实践,如工厂方法模式和单例模式,我们可以进一步增强系统的灵活性和可扩展性。


同时,在处理深克隆和浅克隆的问题时,我们需要根据具体需求选择合适的克隆方式,并在具体原型类中进行相应的处理。深克隆和浅克隆的选择将影响对象属性的独立性和引用对象的共享性。


通过本文的介绍,相信你对原型管理器的概念和使用有了更深入的了解。在实际开发中,原型管理器可以帮助我们更好地管理对象原型,并提高代码的效率和可维护性。


然而,设计模式世界中还有许多其他精彩的故事等待我们探索。在下一篇博文中,我们将深入研究另一个引人入胜的设计模式,为你带来更多惊喜。敬请期待!


好了,今天的分享到此结束。如果觉得我的博文帮到了您,您的点赞和关注是对我最大的支持。如遇到什么问题,可评论区留言。文章来源地址https://www.toymoban.com/news/detail-722804.html


到了这里,关于二十三种设计模式全面解析-原型模式进阶之原型管理器:集中管理对象原型的设计模式之道的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二十三种设计模式(待更)

    资料来源于老师讲解以及大佬的设计模式仓库 zhengqingya 将对象和类按某种布局组成更大的结构,并同时保持结构的灵活和⾼效。 1.适配器 适配器就是将原先无法直接使用的某个接口或者类通过适配器模式转换为可以使用的接口或者类。将一个类的接口转换成客户希望的另外

    2024年02月08日
    浏览(41)
  • 二十三种设计模式第十三篇--享元模式

    享元模式,主要就是一种池化方案,主要用于创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于 结构型模式 ,它提供了减少对象数量从而改善应用所需的对象结构的方式。 享元模式,尝试重用现有的同类对象,如果未找到相同匹配的对象,那么就去创

    2024年02月12日
    浏览(43)
  • 二十三种设计模式第二十篇--备忘录模式

    备忘录模式,备忘录模式属于行为型模式。它允许在不破坏封装的情况下捕获和恢复对象的内部状态。 保存一个对象的某个状态,以便在适当的时候恢复对象,该模式通过创建一个备忘录对象来保存原始对象的状态,并将其存储在一个负责管理备忘录的负责人对象中。 备忘

    2024年02月14日
    浏览(37)
  • 二十三种设计模式第十九篇--命令模式

    命令模式是一种行为设计模式, 它将请求封装成一个独立的对象,从而允许您以参数化的方式将客户端代码与具体实现解耦 。在命令模式中, 命令对象充当调用者和接收者之间的中介 。这使您能够根据需要将请求排队、记录请求日志、撤销操作等。 命令模式的核心组成部

    2024年02月14日
    浏览(37)
  • 二十三种设计模式第十四篇--策略模式

    策略模式:主要围绕一个类的行为或者其算法在运行时更改,也是一种行为型模式。 在软件开发中,我们经常遇到需要根据不同的情况选择不同算法或行为的情况。传统的做法是使用大量的条件语句来实现这种逻辑,但这样的实现方式往往难以维护和扩展。策略模式(Strat

    2024年02月12日
    浏览(59)
  • 二十三种设计模式第十八篇--责任链模式

    责任链模式是一种行为型设计模式, 它允许你将请求沿着处理者链传递,直到有一个处理者能够处理该请求为止。责任链模式将请求发送者和请求处理者解耦,从而使得多个处理者都有机会处理同一个请求。 该模式包含以下几个关键角色: 抽象处理者(Handler):定义了一个

    2024年02月15日
    浏览(48)
  • 二十三种设计模式第十五篇--模版方法模式

    模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,而将一些步骤延迟到子类中实现。通过使用这种模式,我们可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。 模板方法模式的核心思想是将一个算法分解为一系列步骤,并将可变的部分封装在

    2024年02月12日
    浏览(62)
  • 二十三种设计模式第二十四篇--访问者模式(完结撒花)

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。 通过这种方式,元素的执行算法可以随着访问者改变而改变。 这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的

    2024年02月14日
    浏览(42)
  • 二十三种设计模式第十六篇--观察者模式

    观察者模式是一种行为型设计模式,它建立了一种对象间的一对多依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式可以实现对象间的松耦合通信,提高系统的可扩展性和灵活性。 观察者模式的核心是两个角色:主题(

    2024年02月12日
    浏览(48)
  • 【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

    简单工厂模式代码实现如下: 📢 意图要背 工厂方法代码实现如下: 抽象工厂模式代码如下: 生成器模式代码如下: 原型模式代码实现如下: 单例模式代码如下: 桥接模式代码实现如下: 组合模式添加和删除代码实现: 装饰器模式代码实现: 外观模式代码实现: 代理模

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包