文章目录
-
📕前言
-
💨前提引用
-
💨解决方式
-
- 一、🍂传统方式
-
- 🔥设计代码
-
🔥优缺点比较
-
二、🍂原型模式
-
- 🔥思路分析
-
🔥基本介绍
-
🔥类图分析
-
🔥代码设计
-
💨方式比较
-
📕总结
=======================================================================
昨天学习了工厂模式,今天给大家带来另一种Java设计模式:原型设计模式。这个模式较比于工厂模式,我用克隆羊的Java案例来进行讲解,就比较容易理解和使用,内容不多,希望大家喜欢💕
=========================================================================
假设有一只羊,叫做“多莉”(就是高中学的那个克隆羊多莉),年龄是3岁,颜色是白色。现在用编程实现对多莉的克隆:即克隆一只跟它一模一样的小羊(名字、年龄和颜色相同)
=========================================================================
🔥设计代码
先创建多莉这个小羊:
public class Sheep {
private String name;
private int age;
private String color;
public Sheep(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return “Sheep [name=” + name + “, age=” + age + “, color=” + color + “]”;
}
}
创建类People
当做生物学家,操作克隆的整个过程
public class People {
public static void main(String[] args) {
//原型小羊
Sheep oldSheep = new Sheep(“多莉”, 3, “白色”);
//开始克隆
Sheep newSheep = new Sheep(oldSheep.getName(), oldSheep.getAge(), oldSheep.getColor());
System.out.println(oldSheep);
System.out.println(newSheep);
}
}
是如何操作的呢?由代码可以看出,当我们要克隆一个新的小羊的时候,我们在构造器中直接引用了原型小羊的getAge()
,getName()
,getColor()
的方法,实现了全部的克隆。
运行结果:
🔥优缺点比较
优点:
优点是比较好理解,简单易操作
缺点:
在创建新的对象时,总是需要重新获取原始对象的属性,如果创建的对象比较复杂时,效率较低
总是需要重新初始化对象,而不是动态地获得对象运行时的状态, 不够灵活
🔥思路分析
那么,该如何避免传统方式的缺点呢?我们知道,Java中Object类是所有类的父类,Object类提供了一个clone()方法,该方法可以将一个Java对象复制一份,但是需要实现clone的Java类要实现一个接口Cloneable,该接口表示该类能够复制且具有复制的能力,由此来引出我们的原型模式。
🔥基本介绍
-
原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象
-
原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象, 无需知道如何创建的细节
-
工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建 的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()
🔥类图分析
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
Mysql面试题汇总(一)
Mysql面试题汇总(二)
Redis常见面试题汇总(300+题)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
题汇总(一)
[外链图片转存中…(img-AXlnxzhc-1713527197859)]
Mysql面试题汇总(二)
[外链图片转存中…(img-JlCaqvmk-1713527197859)]
Redis常见面试题汇总(300+题)
[外链图片转存中…(img-TbhLJNrF-1713527197860)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!