Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >原型模式

原型模式

作者头像
发布于 2019-04-18 08:42:34
发布于 2019-04-18 08:42:34
39000
代码可运行
举报
文章被收录于专栏:WD学习记录WD学习记录
运行总次数:0
代码可运行

原型模式用于创建重复对象,同时又能保证性能。属于创建型模式,提供了一种创建对象的最佳方式。

该模式实现了一个原型接口,接口用于创建当前对象的克隆。当直接创建对象的带价比较大时,采用这种模式。

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

解决在运行期间建立和删除原型。

何时使用:1.当一个系统应该独立于它的产品创建,构成和表示时。2. 当要实例化的类是在运行时刻指定时,例如通过动态装载。3.为了避免创建一个与掺配类层次平行的工程类层次。4. 当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并且克隆他们可能比每次用合适的状态手工实例化该类更加方便一点。

关键代码:1.实现克隆操作。2.原型模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,同样要求这些易变类拥有稳定的接口。

优点:1.性能提高。2.逃避构造函数的约数。

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public abstract class Shape implements Cloneable {
    private String id;
    protected  String type;

    abstract void draw();

    public String getType(){
        return type;
    }

    public String getId(){
        return id;
    }

    public void setId(String id){
        this.id=id;
    }

    public Object clone(){
        Object clone=null;
        try{
            clone=super.clone();

        }catch (CloneNotSupportedException e){
            e.printStackTrace();
        }
        return clone;
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Rectangle extends Shape {
    public Rectangle(){
        type="Rectangle";
    }
    @Override
    public void draw(){
        System.out.println("Inside Rectangle: draw() method");
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Circle extends Shape {
    public Circle(){
        type="Circle";
    }

    @Override
    public void draw() {
       System.out.println("Inside Circle:: draw() method");
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Square extends Shape {
    public Square(){
        type="Square";
    }
    @Override
    public void draw(){
        System.out.println("Inside Square:draw() method");
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ShapeCache {
    private static Hashtable<String,Shape> shapeMap=new Hashtable<>();

    public static void loadCache(){
        Circle circle=new Circle();
        circle.setId("1");
        shapeMap.put(circle.getId(),circle);

        Square square=new Square();
        square.setId("2");
        shapeMap.put(square.getId(),square);

        Rectangle rectangle=new Rectangle();
        rectangle.setId("3");
        shapeMap.put(rectangle.getId(),rectangle);
    }

    public static Shape getShape(String shapeId){
        Shape cachedShape=shapeMap.get(shapeId);
        return (Shape)cachedShape.clone();
    }
}

参考:

菜鸟教程 原型模式

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年04月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
九、原型模式 ( Prototype Pattern )
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能
botkenni
2022/09/07
4180
九、原型模式 ( Prototype Pattern )
创建型模式(二)
关于创建型模式中工厂方法模式,抽象工厂模式在上一篇文章中我们了解了一下,今天我们看一下单例模式,建造者模式,原型模式。
每天学Java
2020/06/02
3040
【玩转23种Java设计模式】创建型模式篇:原型模式
  将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。   这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。
程序员云帆哥
2022/05/12
1800
原型模式
原型模式Prototype Pattern用原型实例指向创建对象的类,使用于创建新的对象的类的共享原型的属性与方法。
WindRunnerMax
2020/09/17
2800
原型模式与享元模式
原型模式和享元模式,前者是在创建多个实例时,对创建过程的性能进行调优;后者是用减少创建实例的方式,来调优系统性能。这么看,你会不会觉得两个模式有点相互矛盾呢?
架构狂人
2023/08/16
2970
原型模式与享元模式
设计模式之--原型模式
原型模式的核心是实现Cloneable接口,此接口为JDK提供的一个标识接口,只有实现了此接口的类才能被拷贝。 原型模式的通用类图如下;
代码改变世界-coding
2018/09/27
4070
设计模式之--原型模式
创造性模式——原型模式
PrototypePatternDemo 使用 ShapeCache 类来获取存储在 Hashtable 中的形状的克隆。
栗筝i
2022/12/01
2630
创造性模式——原型模式
Java设计模式学习笔记—原型模式
文章最后“Java设计模式笔记示例代码整合”为本系列代码整合,所有代码均为个人手打并运行测试,不定期更新。本节内容位于其Prototype包(package)中。
WindCoder
2018/09/20
3810
Java设计模式学习笔记—原型模式
设计模式-原型模式
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
架构狂人
2023/10/06
2120
设计模式-原型模式
23天读懂23种设计模式:原型模式(创建型)
创建型模式是用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其他关联对象的创建、组合和表示方式。
后台技术汇
2022/05/28
2520
23天读懂23种设计模式:原型模式(创建型)
Java设计模式之原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,它允许对象在创建时通过复制一个现有对象的实例来进行。该模式的主要目的是通过克隆(复制)现有对象来创建新对象,从而避免了直接使用构造函数创建新对象的复杂性。原型模式通常涉及一个抽象的原型类,该类声明了一个克隆方法,具体的子类实现该方法以创建新对象。
刺槐儿
2024/01/21
2520
23种设计模式之原型模式
在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。
Java技术债务
2022/09/26
2150
23种设计模式之原型模式
23设计模式之 --------- 原型模式
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
默 语
2024/11/20
730
23设计模式之 --------- 原型模式
Java 设计模式(八)《原型模式》
与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。 浅拷贝实现 Cloneable,重写, 深拷贝是通过实现 Serializable 读取二进制流。
星尘的一个朋友
2020/11/25
3380
☀️一张思维图带大家了解Java常见设计模式☀️《❤️记得收藏❤️》
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解,本文主要列举了常用的几种设计模式。
苏州程序大白
2021/08/31
6080
☀️一张思维图带大家了解Java常见设计模式☀️《❤️记得收藏❤️》
dart设计模式之原型模式
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
徐建国
2021/08/06
4630
设计模式—— 十三 :原型模式
原型模式的核心是一个clone方法,通过该方法进行对象的拷贝,Java 提供了一个Cloneable接口来标示这个对象是可拷贝的,Cloneable接口的作用是标记,在JVM中具有这个标记的对象才有可能被拷贝。那怎么才能从“有可能被拷贝”转换为“可以被拷贝”呢?方法是覆盖 clone()方法:
三分恶
2020/07/16
5760
原型模式
Java中内置了克隆机制,Object的clone方法,能够实现对象的克隆,但是需要两个步骤:
田维常
2019/07/16
4830
原型模式
设计模式实战-原型模式,我们就来依法炮制
设计一个类的时候,我们通常会使用到构造函数,这里类和对象的关系好比模具和构件的关系,对象总是从类中创建的。但是某些场景下是不允许类的调用者直接调用构造函数,也就说对象未必需要从类中衍生出来,现实生活中存在太多案例是通过直接 “克隆” 来产生新的对象,而且克隆出来的本体和克隆体看不出任何区别。
架构师修炼
2020/07/17
5580
原型模式解读
克隆羊问题:现在有一只羊 tom,姓名为: tom, 年龄为:1,请编写程序创建和 tom 羊 属性完全相同的 10只羊。
一个风轻云淡
2023/10/15
1600
原型模式解读
相关推荐
九、原型模式 ( Prototype Pattern )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验