设计模式之原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。

原型模式包含以下几个主要角色:

  • 原型接口(Prototype Interface) :定义一个用于克隆自身的接口,通常包括一个 clone() 方法。

  • 具体原型类(Concrete Prototype) :实现原型接口的具体类,负责实际的克隆操作。这个类需要实现 clone() 方法,通常使用浅拷贝或深拷贝来复制自身。

  • 客户端(Client) :使用原型实例来创建新的对象。客户端调用原型对象的 clone() 方法来创建新的对象,而不是直接使用构造函数。

优点

  • 性能提高
  • 避免构造函数的约束

缺点

  • 配备克隆方法需要全面考虑类的功能,对已有类可能较难实现,特别是处理不支持串行化的间接对象或含有循环结构的引用时。

代码案例

复制代码
import java.util.UUID;  
  
public interface Prototype {  
    Object  clone();  
}  
  
/**  
 * 飞机类  
 */  
class Plane implements Prototype {  
    private Integer id;  
    private String type;  
  
    public Integer getId() {  
        return id;  
    }  
  
    public String getType() {  
        return type;  
    }  
  
    public Plane(){  
        id = (int) (Math.random() * 100 + 1);  
        type = UUID.randomUUID().toString();  
    }  
  
    public Plane(Plane plane){  
        this.id = plane.id;  
        this.type = plane.type;  
    }  
  
    @Override  
    public String toString() {  
        return "Plane{" +  
                "id=" + id +  
                ", type='" + type + '\'' +  
                '}';  
    }  
  
    @Override  
    public Object clone() {  
        return new Plane(this);  
    }  
}  
  
class Test{  
    public static void main(String[] args) {  
        Plane plane = new Plane();  
        System.out.println(plane);  
        Plane clone = (Plane) plane.clone();  
        System.out.println(clone);  
    }  
}

程序输出

复制代码
Plane{id=71, type='cc4e73ae-85c4-4735-a74d-d7bae0642724'}
Plane{id=71, type='cc4e73ae-85c4-4735-a74d-d7bae0642724'}
相关推荐
收破烂的小熊猫~21 分钟前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
佛祖让我来巡山3 小时前
【工厂和策略设计模式妙用】解决接口选择与多重if-else 问题
设计模式·策略模式·工厂模式
hqxstudying7 小时前
Java创建型模式---原型模式
java·开发语言·设计模式·代码规范
WebInfra9 小时前
如何在程序中嵌入有大量字符串的 HashMap
算法·设计模式·架构
Gavynlee14 小时前
plantuml用法总结
设计模式
DKPT14 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
缘来是庄14 小时前
设计模式之迭代器模式
java·设计模式·迭代器模式
摘星编程17 小时前
深入解析迭代器模式:优雅地遍历聚合对象元素
设计模式·迭代器模式·软件开发·编程技巧·面向对象设计
DKPT21 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
面朝大海,春不暖,花不开1 天前
使用 Python 实现 ETL 流程:从文本文件提取到数据处理的全面指南
python·etl·原型模式