zoukankan      html  css  js  c++  java
  • 设计模式-02原型模式(Prototype Pattern)

    1.模式动机

    在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。

    简单粗暴的理解就是:创建一个对象当做模板,然后利用这个模板使用clone方法快速的创建一个新的对象。

    2.模式定义

    原型模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。用这种方式创建对象非常高效,根本无须知道对象创建的细节。

    3.模式代码

    使用 Java 中提供的clone方法实现原型模式非常简单。但是要注意浅克隆深克隆,这里就不具体说这两个名词了。

    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;
    
    @Getter
    @Setter
    @ToString
    public class User implements Cloneable{
    
        private String name;
    
        public User(String name) {
            this.name = name;
        }
    
        @Override
        protected User clone() throws CloneNotSupportedException {
            System.out.println("原型对象复制成功");
            return (User) super.clone();
        }
    }
    public class Client {
    
        public static void main(String[] args) throws CloneNotSupportedException {
            User user = new User("Mike");
            System.out.println(user);
    
            User cloneUser = user.clone();
            System.out.println(cloneUser);
        }
    
    }
    

    运行结果:

    User(name=Mike)
    原型对象复制成功
    User(name=Mike)
    

    4.总结

    原型模式通常适用于以下场景:

    • 对象之间相同或相似,即只是个别的几个属性不同的时候。
    • 对象的创建过程比较麻烦,但复制比较简单的时候。
  • 相关阅读:
    RelativeLayout布局属性
    调整CodeIgniter错误报告级别
    php 报错 Cannot modify header information
    ScrollView中嵌套ListView
    机器学习索引贴(未分类)
    进程与线程
    并行程序
    缓存命中率
    启发式算法(Heuristic Algorithm)
    详解 LSTM
  • 原文地址:https://www.cnblogs.com/wuqinglong/p/12217489.html
Copyright © 2011-2022 走看看