java23种设计模式(四) -- 原型模式(创建型设计模式)

原型模式用于优化大量重复对象的创建,尤其在需要避免从远程服务获取数据时。通过实现Cloneable接口,对象能自我克隆,实现浅度或深度复制。在示例中,模拟了短信群发功能,利用原型模式重构代码,提高性能。虽然使用频率不高,但在特定场景下能有效减少初始化时间和对象间的耦合。然而,过度使用可能导致设计复杂性增加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原型模式

简介

原型模式主要解决的问题就是创建大量重复的类,而我们模拟的场景就需要给不同的用户都创建相同的试卷,但这些试卷的题目不便于每次都从库中获取,甚至有时候需要从远程的RPC中获取。这样都是非常耗时的,而且随着创建对象的增多将严重影响效率。

在原型模式中所需要的非常重要的手段就是克隆,在需要用到克隆的类中都需要实现implements Cloneable 接口

原型模式特点

  1. 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。
  2. 目标对象是原型对象的一个克隆。也就是说,通过原型模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。
  3. 根据对象克隆深度层次的不同,有浅度克隆与深度克隆。

代码演示

模拟短信群发的功能

项目结构
在这里插入图片描述

/**
 * 短信内容模板
 */
public class Template{
    //短信内容
    private String context = "恭喜发财,红包拿来";

    //取得内容
    public String getContext(){
        return this.context;
    }
}

/**
 * 发送类
 */
public class Message implements Cloneable{
    //收信人名字
    private String receiver;
    //短信内容
    private String context;
    //构造函数
    public Message (Template template)
    {
        this.context = template.getContext();
    }

    @Override
    public Message clone(){
        Message message = null;
        try{
            message = (Message)super.clone();
        }
        catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
        return message;
    }

    //setter/getter方法
    public String getContext(){
        return context;
    }

    public void setContext(String context){
        this.context = context;
    }

    public String getReceiver(){
        return receiver;
    }

    public void setReceiver(String receiver){
        this.receiver = receiver;
    }


}

测试类

public class ApiTest {

    @Test
    public void testCommodity() throws Exception {
        String[] name = {"Jack","Tom","voidy"};
        Message message = new Message(new Template());
        for (String n :name ) {
            message.setReceiver(n);
            Message cloneMessage = message.clone();
            sendMessage(cloneMessage);
        }
    }

    public static void sendMessage(Message message){
        System.out.println(message.getReceiver());
        System.out.println(message.getContext());
    }

}

在这里插入图片描述

小结

  • 以上的实际场景模拟了原型模式在开发中重构的作用,但是原型模式的使用频率确实不是很高。如果有一些特殊场景需要使用到,也可以按照此设计模式进行优化。
  • 另外原型设计模式的优点包括;便于通过克隆方式创建复杂对象、也可以避免重复做初始化操作、不需要与类中所属的其他类耦合等。但也有一些缺点如果对象中包括了循环引用的克隆,以及类中深度使用对象的克隆,都会使此模式变得异常麻烦。
  • 终究设计模式是一整套的思想,在不同的场景合理的运用可以提升整体的架构的质量。永远不要想着去硬凑设计模式,否则将会引起过渡设计,以及在承接业务反复变化的需求时造成浪费的开发和维护成本。
  • 初期是代码的优化,中期是设计模式的使用,后期是把控全局服务的搭建。不断的加强自己对全局能力的把控,也加深自己对细节的处理。可上可下才是一个程序员最佳处理方式,选取做合适的才是最好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值