美文网首页Java设计模式
Java实现23种设计模式(三):原型模式

Java实现23种设计模式(三):原型模式

作者: 依然慢节奏 | 来源:发表于2020-06-10 10:23 被阅读0次

二十三种设计模式分类

设计模式三大分类.jpg

一、概述

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

优点

1、性能提高。
2、逃避构造函数的约束。

缺点

1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。
2、必须实现 Cloneable 接口。

场景

1、资源优化场景。
2、类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。
3、性能和安全要求的场景。
4、通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。
5、一个对象多个修改者的场景。
6、一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。
7、在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者。


二、实现

1. 结构图

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

  • 抽象原型类:规定了具体原型对象必须实现的接口。
  • 具体原型类:实现抽象原型类的 clone()方法,它是可被复制的对象。
  • 访问类:使用具体原型类中的 clone()方法来复制新的对象。
原型模式

PS:UML结构图可以参考,例子实现并不根据UML图来完成,灵活实现即可;

2. 实现

package cn.missbe.model.prototype;

/**
 * Copyright (c) 2020.
 * Email: love1208tt@foxmail.com
 *
 * @author lyg  2020/4/29 下午9:36
 * description:
 * 原型模式:了解即可,用得不多
 * 利用已有的一个原型对象,快速地生成和原型对象一样的实例
 * Java中的拷贝:深拷贝、浅拷贝
 **/

public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Location location = new Location("贝克街22号", "22号");
        Person p = new Person("xx-uu", "18", location);
        Person copy = (Person) p.clone();
        System.out.println("RelationShip:" + (copy == p));
        System.out.println("P:" + p);
        System.out.println("Copy:" + copy);
    }
}

/**必须实现Cloneable,不然会报CloneNotSupportedException异常*/
class Person implements Cloneable{
    private String name;
    private String age;
    private Location location;

    public Person(String name, String age, Location location) {
        this.name = name;
        this.age = age;
        this.location = location;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Person p = (Person) super.clone();
        ///深拷贝
        p.location = (Location) location.clone();

        return p;
    }

    @Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", location=" + location + '}';
    }
}

/**必须实现Cloneable,不然会报CloneNotSupportedException异常*/
class Location implements Cloneable{
    private String street;
    private String roomId;

    public Location(String street, String roomId) {
        this.street = street;
        this.roomId = roomId;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public String toString() {
        return "Location{" + "street='" + street + '\'' + ", roomId='" + roomId + '\'' + '}';
    }
}

相关文章

  • Java设计模式之04_Prototype(原型模式)

    更多Java设计模式:Java设计模式-目录 原型模式是一种简单、易使用的创建型设计模式,通过给出一个原型对象来指...

  • Java设计模式——原型模式

    Java设计模式之原型模式 回顾 Java设计模式系列的上一期写了工厂模式,那么创建类的设计模式还有生成器模式和原...

  • 原型模式

    由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。 1. 模式的结构 原型...

  • java23种设计模式

    java的设计模式大体上分为三大类:创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式...

  • Java设计模式

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模...

  • Java设计模式之工厂模式

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模...

  • 0. java的设计模式

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • Java架构师课程

    Java架构班开学典礼 Spring中常用的设计模式概述及工厂模式详解 单例模式及原型模式单例模式及原型模式单例模...

  • Java设计模式<原型模式>

    Java设计模式<原型模式> 意图 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思...

网友评论

    本文标题:Java实现23种设计模式(三):原型模式

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