《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

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

相关推荐
懒洋洋大魔王16 分钟前
7.Java高级编程 多线程
java·开发语言·jvm
茶馆大橘21 分钟前
【黑马点评】已解决java.lang.NullPointerException异常
java·开发语言
星辰@Sea24 分钟前
服务注册中心对比及使用场景分析
java·云原生
马剑威(威哥爱编程)28 分钟前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization
yunhuibin28 分钟前
ffmpeg面向对象——参数配置秘密探索及其设计模式
学习·设计模式·ffmpeg
bug菌¹30 分钟前
滚雪球学SpringCloud[4.1讲]: Spring Cloud Gateway详解
java·spring cloud·微服务
MuseLss1 小时前
HashMap高频面试知识点
java·开发语言·哈希算法
tyler-泰勒1 小时前
初始c++:入门基础(完结)
java·开发语言·c++
重生之我要进大厂1 小时前
LeetCode 876
java·开发语言·数据结构·算法·leetcode
_祝你今天愉快1 小时前
技术成神之路:设计模式(十四)享元模式
java·设计模式