首页 > 资讯 > > 正文

如何以孙悟空七十二变去理解原型模式? 时讯

2023-06-08 00:48:51 来源:博客园


(相关资料图)

前言

本文主要讲述原型模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。

一.什么是原型模式

原型模式是23种设计模式中创建型模式的一种,它关注的是用一个已经存在的实例对象作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。

二.生活中的原型模式1.孙悟空

孙悟空有独一无二的法宝如意金箍棒和众多法术,其中有一个名为身外身法的道术,孙悟空拔身上的毛幻化出另一个自己,这个大家应该有印象吧,这个幻化出新的分身就跟设计模式中的原型模式很相似。

2.哪吒

哪吒不管是西游记还是封神榜中都出现过,也是江帅所喜欢的中国神话人物之一,哪吒虽然没有孙悟空会身外身法,但是他会三头六臂,通过这个法术,哪吒会变换出2个新的头颅和2对新的手臂,而这个三头六臂是以头或者手臂为参照物变化出来的,就跟设计模式中的原型模式很相似。

3.漩涡鸣人

旋涡鸣人是日本漫画中火影忍者的人物,影分身之术是他最厉害的忍术之一。这个忍术是能够变幻出多个相同的自己,以自己为参照物根据查克拉的量来变幻出不同的数量,这就跟设计模式中的原型模式很相似。

三.原型模式的实现

接下来江帅以孙悟空的身外身法之术来举例,通过原型模式来实现。先创建一个武器类,再创建一个孙悟空的类并实现克隆接口

package com.qianfeng.ran;/** @author:江帅*      孙悟空类*/public class SunWuKong implements Cloneable{    //名字    private String name;    //武器    private Weapon weapon;    public SunWuKong() {    }    public SunWuKong(String name, Weapon weapon) {        this.name = name;        this.weapon = weapon;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Weapon getWeapon() {        return weapon;    }    public void setWeapon(Weapon weapon) {        this.weapon = weapon;    }    @Override    public String toString() {        return "SunWuKong{" +            "name="" + name + """ +            ", weapon=" + weapon +            "}";    }    //身外身之术    @Override    protected Object clone() throws CloneNotSupportedException {        //通过 Object 类的 clone() 克隆出新的孙悟空        SunWuKong sunWuKong = (SunWuKong)super.clone();        //新的分身名等同当前名        sunWuKong.setName(name);        //新的分身手持同样的武器,但为新的对象        sunWuKong.setWeapon(new Weapon(weapon.getName(),weapon.getSource()));        return sunWuKong;    }}/* * @author:江帅 *      武器类 */public class Weapon {    //武器名    private String name;    //来源    private String source;    public Weapon() {    }    public Weapon(String name, String source) {        this.name = name;        this.source = source;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSource() {        return source;    }    public void setSource(String source) {        this.source = source;    }    @Override    public String toString() {        return "Weapon{" +                "name="" + name + """ +                ", source="" + source + """ +                "}";    }}

最后通过原型模式来创建孙悟空的分身。

package com.qianfeng.ran;/* * @author:江帅 *      客户端 */public class Demo {    public static void main(String[] args) throws CloneNotSupportedException {        //phantom        //创建孙悟空对象,拥有东海龙宫的如意金箍棒        SunWuKong sunWuKong = new SunWuKong("孙悟空",new Weapon("如意金箍棒","东海龙宫"));        //调用克隆方法创建2个分身    --  身外身之术        SunWuKong phantom1 = (SunWuKong)sunWuKong.clone();        SunWuKong phantom2 = (SunWuKong)sunWuKong.clone();        //执行结果:        //SunWuKong{name="孙悟空", weapon=Weapon{name="如意金箍棒", source="东海龙宫"}}        System.out.println(sunWuKong.toString());        //执行结果:        //SunWuKong{name="孙悟空", weapon=Weapon{name="如意金箍棒", source="东海龙宫"}}        System.out.println(phantom1.toString());        //执行结果:        //SunWuKong{name="孙悟空", weapon=Weapon{name="如意金箍棒", source="东海龙宫"}}        System.out.println(phantom2.toString());        //改变分身的武器和出产地        phantom1.getWeapon().setName("芭蕉扇");        phantom1.getWeapon().setSource("火焰山");        phantom2.getWeapon().setName("紫金红葫芦");        phantom2.getWeapon().setSource("太上老君");        //执行结果:        //SunWuKong{name="孙悟空", weapon=Weapon{name="如意金箍棒", source="东海龙宫"}}        //执行结果:        System.out.println(sunWuKong.toString());        //执行结果:        //SunWuKong{name="孙悟空", weapon=Weapon{name="芭蕉扇", source="火焰山"}}        System.out.println(phantom1.toString());        //执行结果:        //SunWuKong{name="孙悟空", weapon=Weapon{name="紫金红葫芦", source="太上老君"}}        System.out.println(phantom2.toString());    }}
四.总结

在Java中克隆新的对象会产生相同的引用,改变克隆对象的内容会改变到原型对象,这个属于浅拷贝,就像咱们的案例,如果用的是浅拷贝,打印结果会是3个武器都是来自太上老君的紫金红葫芦。

而使用原型模式克隆出来的对象则跟原型对象不是同一个地址,改变克隆对象不会影响原型对象,这个属于深拷贝,如案例所示每个对象里的内容不会因为别的对象的改变而改变。

下一章,将带大家学习市场供需关系(设计模式之生产者和消费者模式)。

标签:

如何以孙悟空七十二变去理解原型模式? 时讯

孙悟空有独一无二的法宝如意金箍棒和众多法术,其中有一个名为身外身法

2023-06-08 00:48:51

携程联合天津航空发布“京朋冀友 从津飞”空铁联运产品

《中国民航报》、中国民航网记者曾晓新报道:6月6日,“京朋冀友从津飞

2023-06-08 00:27:54

省委老干部局主题教育调研组来金塔县调研_环球快看

6月6日,省委老干部局副局长徐维德带领主题教育调研组来金塔县调研,县

2023-06-08 00:02:36

国网天津滨海公司:全力保障高考电力可靠供应|全球快讯

“中新天津生态城南开中学保电人员已就位,现场一切正常。”“塘沽紫云

2023-06-07 23:49:58

我驻日使馆谈核污染水排海:日方一意孤行令人愤慨 每日聚焦

据中国驻日本大使馆网站6月7日消息,驻日本使馆发言人就福岛核污染水排

2023-06-07 23:05:54

今晨突发!刚刚,辟谣了

今晨6时30分许上海沪闵路剑川路路口发生一起交通事故经初步调查,苏某

2023-06-07 22:28:47

金百泽:研发了400G光模块PCB关键工艺技术

金百泽在互动平台表示,公司研发了400G光模块PCB关键工艺技术,该技术

2023-06-07 22:27:00

今热点:6月7日国内硝酸铵产业链部分价格上涨

产品6月6日6月7日涨跌幅单位:元 吨液氨3106 673016 670元 吨硝酸2033

2023-06-07 21:57:06

【全球速看料】担心不能退费进入“退款群”?小心这可能是陷阱

近期,有不法分子以培训班退费名义实施诈骗,危害严重。不法分子先是在

2023-06-07 21:48:34

江苏华辰06月07日主力资金大幅流出 新资讯

江苏华辰06月07日主力资金净流出3116 89万元,涨跌幅为-5 05%,主力净

2023-06-07 21:27:39

组图|2023海南高考首场考试结束

新海南客户端、南海网6月7日消息(记者李昊)6月7日,海南高考首场考试

2023-06-07 20:48:37

红豆股份(600400)6月7日主力资金净卖出420.99万元_环球报道

截至2023年6月7日收盘,红豆股份(600400)报收于3 13元,下跌0 32%,换

2023-06-07 20:41:38

天天快播:美的空调柜机型号价格-美的空调柜机

1、品牌、型号不一样尺寸也不一样一般3匹宽X高X深(mm)900X750X330一般

2023-06-07 20:34:35

通光线缆:目前暂无产品应用在大模型计算的配套中|时快讯

通光线缆6月7日在互动平台表示,公司航空航天用耐高温线缆产品曾应用于

2023-06-07 20:19:42

戴连先被查_环球热门

天津市公安局政治部原党委委员、纪委书记戴连先接受审查调查天津市公安

2023-06-07 19:54:49

全球观天下!高立减930元!天猫国行PS5双手柄套装促销中

今日PlayStation官方宣布,淘宝618品类日,PlayStation双手柄套装至高立减930元。

2023-06-07 19:34:15

火车票买成了学生票怎么办_火车票学生票怎么买

1、步骤如下:  首先,打开购买火车票的官网。2、  2、然后,点击

2023-06-07 19:28:23

环球热点!2023年法网:德约科维奇与阿尔卡拉斯会师男单半决赛

6月6日,2023年法国网球公开赛进行四分之一决赛,塞尔维亚名将德约科维

2023-06-07 19:09:46

“高考结束后,突然想要出国留学,有哪些路径可走?”

高考第一天,微博热搜被各种“高考”话题花式占领!高考是中国社会的重

2023-06-07 18:30:35

环球观焦点:长春启璞科技信息咨询有限公司入围《信用中国》栏目

为进一步推进商业信用体系建设,促进企业诚实守信经营,面向企业普及诚信

2023-06-07 18:26:59

全球通讯!深圳签订全国首个抵制黑产自律公约

针对“代理退保”“反催收”等黑产违法行为,监管层面又有新动态。6月7

2023-06-07 18:05:15

贵航股份(600523)6月7日主力资金净卖出316.60万元_全球热点

截至2023年6月7日收盘,贵航股份(600523)报收于12 96元,下跌1 07%,换

2023-06-07 18:03:38

河南焦作市开展“三夏”期间成品油价格专项检查-世界简讯

河南焦作市开展“三夏”期间成品油价格专项检查,正值“三夏”农忙时节

2023-06-07 17:30:53

今日热文:黑河市高龄老人能领补贴吗多少钱 2023年黑河市高龄津贴发放标准

根据相关消息:退休人员除领取60岁以上老人养老金外,80岁老人还可以每

2023-06-07 17:30:21

全球今亮点!试驾海鸥真实感受:底盘扎实,动力够用,极夜黑加深海蓝好看

此前,我们在厦门近40℃的天气里试驾了比亚迪海鸥,发现在城市道路里,

2023-06-07 17:20:20

营造整洁舒心考试环境,宝山环卫在行动! 最新快讯

2023安徽高考是全国几卷 采用什么高考模式

强制进行GPU渲染有风险吗_强制进行gpu渲染 全球新动态

致考生:逢考必过 大胜归来_天天精选

收评:指数全天走势分化沪指涨1.36% 宁德时代跌2.8% 当前速读

极星或将停产Polestar 1 未来主攻纯电市场|环球聚焦

2023年上海高考作文题来啦!

2023dnf周年庆增幅活动大全 地下城与勇士周年庆增幅活动时间奖励一览[多图]_热资讯

即时焦点:外窗设铁栅栏、施工区违规住人……重大风险隐患专项排查整治开展

全球微头条丨晒晒太阳就能“长”出特种高分子材料

A股药店股票龙头有哪些?(2023/6/7)|每日热议

经纬股份:6月6日融资买入999.55万元,融资融券余额3536.12万元

法网第11日看点:去年女单决赛重演,小花王欣瑜冲击双打四强|环球热消息

马克龙牵着老婆在山上漫步真甜!布里吉特罕见穿运动鞋,又变嫩了

【世界时快讯】户外经济狂飙

魅族m1e怎么换单尾插_魅族m1e

高盛将2023年美国夏季天然气预测从之前的3.30美元/百万英热下调至2.85美元/百万英热,而远期价格预测为2.38美元/百万英热

全球关注:cad文字打散命令_cad文字打散成线

肩宽的女生穿什么好看_肩宽的女生如何穿衣服

抖音堆叠修仙十胜石怎么获得(十胜石获取方法)

当前关注:无形资产摊销的核算_关于无形资产摊销的核算介绍

福特汽车接近达成出售德国工厂协议 据悉比亚迪等三家团体为主要竞标者 焦点日报

天天新消息丨美股异动 | 迅雷(XNET.US)宣布2000万美元股票回购计划 股价涨超29%

当地时间6月6日,乌克兰国家通讯社报道称,乌克兰国家安全与国防委员会秘书丹尼洛夫就有关扎波罗热核电站是否存在风险问题时表示,目前扎波罗热核电站局势很复杂,但可控,核电站辐射在正常范围内

今日最新!商标注册价格 时间_商标注册价格

x 广告
x 广告

Copyright @  2015-2022 每日家电网版权所有  备案号: 浙ICP备2022016517号-15   联系邮箱:5 146 761 13 @qq.com