《Java极简设计模式》第05章:原型模式(Prototype)

作者:冰河

星球:http://m6z.cn/6aeFbs

博客:https://binghe.gitcode.host

文章汇总:https://binghe.gitcode.host/md/all/all.html

源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/java-simple-design-prototype

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:用最简短的篇幅介绍原型模式最核心的知识,理解原型模式的设计精髓,并能够灵活运用到实际项目中,编写可维护的代码。

大家好,我是冰河~~

今天给大家介绍《Java极简设计模式》的第05章,原型模式(Prototype),用最简短的篇幅讲述设计模式最核心的知识,好了,开始今天的内容。

一、概述

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

二、适用性

1.当一个系统应该独立于它的产品创建、构成和表示时。

2.当要实例化的类是在运行时刻指定时,例如,通过动态装载。

3.为了避免创建一个与产品类层次平行的工厂类层次时。

4.当一个类的实例只能有几个不同状态组合中的一种时。

建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

三、参与者

1.Prototype 声明一个克隆自身的接口。

2.ConcretePrototype 实现一个克隆自身的操作。

3.Client 让一个原型克隆自身从而创建一个新的对象。

四、示例

Prototype

java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description 原型类,实现Cloneable接口
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class Prototype implements Cloneable{

    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public Object clone(){
        try {
            return super.clone();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

ConcretePrototype

java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description 原型类的子类,用于构建原型
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class ConcretePrototype extends Prototype {

    public ConcretePrototype(String name) {
        setName(name);
    }
}

Client

java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description  测试类
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class Test {

    public static void main(String[] args) {
        Prototype pro = new ConcretePrototype("prototype");
        Prototype pro2 = (Prototype)pro.clone();
        System.out.println(pro.getName());
        System.out.println(pro2.getName());
    }
}

result

java 复制代码
prototype
prototype

好了,今天就到这儿吧,相信各位小伙伴们对原型模式有了更清晰的认识,我是冰河,我们下期见~~

相关推荐
s***w11211 分钟前
SpringMVC新版本踩坑[已解决]
java
老李头喽16 分钟前
走进单元测试
java·单元测试
就叫飞六吧16 分钟前
Spring MVC 接口命名为什么会有 *.do/actions等身影?
java·spring·mvc
葡萄成熟时 !21 分钟前
黑马学生管理系统
java·开发语言
沐浴露z36 分钟前
为什么使用SpringAI时通常用Builder来创建对象?详解 【Builder模式】和【直接 new】的区别
java·python·建造者模式
阿杰真不会敲代码38 分钟前
Filter与Interceptor深度解析:分清这两个“拦截器”,面试不再掉坑
java·spring boot·面试
settingsun12251 小时前
AI App: Tool Use Design Pattern 工具使用设计模式
设计模式
带刺的坐椅1 小时前
Solon AI 开发学习6 - chat - 两种 http 流式输入输出
java·ai·solon
客梦1 小时前
Java 道路信息系统
java·笔记