美文网首页
Java 原型模式

Java 原型模式

作者: 索性流年 | 来源:发表于2021-02-18 09:21 被阅读0次

    文集地址

    概述

    • 原型模式隶属于创建型模式,主要是用于创建重复的对象,但每个对象都具有独立的内存地址与指针,互不关联,修改其中一个对象的属性,其他对象不会做出改变。

    原型模式与工厂模式有什么区别

    • 工厂模式是生产的都是同一个对象,若在工厂内修改对象,那所有通过工厂创建的对象都将改变
    • 原型模式将一个对象复制成多个,每个对象都可以更改而不影响其他对象

    优缺点

    • 优点:无需再一个对象上频繁更改,由于每个对象都是独立的,所以可以避免构造函数的约束。
    • 缺点:由于是复制出来的对象,他们的大体思路都是一致的,只是有细微的差别,不符合高内聚低耦合原则(个人觉得官方没这么写)

    简单应用

    • 原型抽象对象
    /**
     * 原型抽象对象
     * @author ext.liuyan10
     * @date 2021/2/7 14:06
     */
    public abstract class Prototype implements Cloneable{
        protected String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Prototype(String name) {
            this.name = name;
        }
    
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
    
    
    • 抽象对象实现
    /**
     * 抽象对象实现
     * @author ext.liuyan10
     * @date 2021/2/7 14:06
     */
    public class ConcretePrototype extends Prototype {
        public ConcretePrototype(String name) {
            super(name);
        }
        public void printingName(){
            System.out.println(this.name);
        }
    }
    
    
    • 调用案例
    /**
     * @author ext.liuyan10
     * @date 2021/2/7 11:31
     */
    public class PrototypeApp {
        public static void main(String[] args) {
            ConcretePrototype prototype = new ConcretePrototype("初始对象");
            prototype.printingName();
            for (int i = 0; i < 2; i++) {
                try {
                    if (prototype.clone() instanceof ConcretePrototype) {
                        ConcretePrototype clone = (ConcretePrototype) prototype.clone();
                        clone.setName("克隆对象"+i);
                        prototype.printingName();
                        clone.printingName();
                    }
                } catch (CloneNotSupportedException e) {
                    System.err.println(e.toString());
                }
            }
        }
    }
    
    • 调用结果
    初始对象
    初始对象
    克隆对象0
    初始对象
    克隆对象1
    Disconnected from the target VM, address: '127.0.0.1:50185', transport: 'socket'
    
    Process finished with exit code 0
    
    

    相关文章

      网友评论

          本文标题:Java 原型模式

          本文链接:https://www.haomeiwen.com/subject/nwubtltx.html