99久久精品日本一区二区免费,五级黄高潮片90分钟视频,娇妻销魂的交换经历,欧美大屁股xxxxhd黑色

您的位置:首頁>熱點 >
  • 如何以孫悟空七十二變去理解原型模式?

    2023-06-07 17:10:21 來源: 博客園


(資料圖片)

前言

本文主要講述原型模式,文中使用通俗易懂的案例,使你更好的學習本章知識點并理解原理,做到有道無術。

一.什么是原型模式

原型模式是23種設計模式中創(chuàng)建型模式的一種,它關注的是用一個已經存在的實例對象作為原型,通過復制該原型對象來創(chuàng)建一個和原型對象相同的新對象。

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

孫悟空有獨一無二的法寶如意金箍棒和眾多法術,其中有一個名為身外身法的道術,孫悟空拔身上的毛幻化出另一個自己,這個大家應該有印象吧,這個幻化出新的分身就跟設計模式中的原型模式很相似。

2.哪吒

哪吒不管是西游記還是封神榜中都出現(xiàn)過,也是江帥所喜歡的中國神話人物之一,哪吒雖然沒有孫悟空會身外身法,但是他會三頭六臂,通過這個法術,哪吒會變換出2個新的頭顱和2對新的手臂,而這個三頭六臂是以頭或者手臂為參照物變化出來的,就跟設計模式中的原型模式很相似。

3.漩渦鳴人

旋渦鳴人是日本漫畫中火影忍者的人物,影分身之術是他最厲害的忍術之一。這個忍術是能夠變幻出多個相同的自己,以自己為參照物根據查克拉的量來變幻出不同的數(shù)量,這就跟設計模式中的原型模式很相似。

三.原型模式的實現(xiàn)

接下來江帥以孫悟空的身外身法之術來舉例,通過原型模式來實現(xiàn)。先創(chuàng)建一個武器類,再創(chuàng)建一個孫悟空的類并實現(xiàn)克隆接口

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 + """ +                "}";    }}

最后通過原型模式來創(chuàng)建孫悟空的分身。

package com.qianfeng.ran;/* * @author:江帥 *      客戶端 */public class Demo {    public static void main(String[] args) throws CloneNotSupportedException {        //phantom        //創(chuàng)建孫悟空對象,擁有東海龍宮的如意金箍棒        SunWuKong sunWuKong = new SunWuKong("孫悟空",new Weapon("如意金箍棒","東海龍宮"));        //調用克隆方法創(chuàng)建2個分身    --  身外身之術        SunWuKong phantom1 = (SunWuKong)sunWuKong.clone();        SunWuKong phantom2 = (SunWuKong)sunWuKong.clone();        //執(zhí)行結果:        //SunWuKong{name="孫悟空", weapon=Weapon{name="如意金箍棒", source="東海龍宮"}}        System.out.println(sunWuKong.toString());        //執(zhí)行結果:        //SunWuKong{name="孫悟空", weapon=Weapon{name="如意金箍棒", source="東海龍宮"}}        System.out.println(phantom1.toString());        //執(zhí)行結果:        //SunWuKong{name="孫悟空", weapon=Weapon{name="如意金箍棒", source="東海龍宮"}}        System.out.println(phantom2.toString());        //改變分身的武器和出產地        phantom1.getWeapon().setName("芭蕉扇");        phantom1.getWeapon().setSource("火焰山");        phantom2.getWeapon().setName("紫金紅葫蘆");        phantom2.getWeapon().setSource("太上老君");        //執(zhí)行結果:        //SunWuKong{name="孫悟空", weapon=Weapon{name="如意金箍棒", source="東海龍宮"}}        //執(zhí)行結果:        System.out.println(sunWuKong.toString());        //執(zhí)行結果:        //SunWuKong{name="孫悟空", weapon=Weapon{name="芭蕉扇", source="火焰山"}}        System.out.println(phantom1.toString());        //執(zhí)行結果:        //SunWuKong{name="孫悟空", weapon=Weapon{name="紫金紅葫蘆", source="太上老君"}}        System.out.println(phantom2.toString());    }}
四.總結

在Java中克隆新的對象會產生相同的引用,改變克隆對象的內容會改變到原型對象,這個屬于淺拷貝,就像咱們的案例,如果用的是淺拷貝,打印結果會是3個武器都是來自太上老君的紫金紅葫蘆。

而使用原型模式克隆出來的對象則跟原型對象不是同一個地址,改變克隆對象不會影響原型對象,這個屬于深拷貝,如案例所示每個對象里的內容不會因為別的對象的改變而改變。

下一章,將帶大家學習市場供需關系(設計模式之生產者和消費者模式)。

關鍵詞:

免責聲明:本網站所有信息,并不代表本站贊同其觀點和對其真實性負責,投資者據此操作,風險請自擔。

上一篇: 風景在路上作文500字

下一篇:最后一頁

相關閱讀
变态另类重口特级| 亚洲精品久久激情国产片| 久久精品动漫一区二区三区| 高潮aaa人人爽人人爱| 人妻女友娇妻沉沦系列| 在线观看国产一区二区三区| 欧美成人精品高清在线观看| gogogo日本免费观看电视| 精品国产av一区二区三区| 亚洲成AV人片一区二区| 国产精品亚洲日韩AV在线 | 香蕉久久夜色精品国产| 自拍偷自拍亚洲精品被多人伦好爽| 高h调教女m强制高潮| xxxx漂亮少妇xxxxhd| 欧洲-级毛片内射八十老太婆| 欧美性色19p| 国产后入又长又硬| 国产绳艺sm调教室论坛| 55夜色66夜色国产精品视频| 日本特黄特色aaa大片免费 | 丰满少妇被猛烈进AV毛片| 亚洲av无一区二区三区久久\| 人人妻人人爽人人做夜欢视频| 国产sm鞭打折磨调教视频| 被窝里的翁憩二十六| 丰满人妻熟妇乱又伦精品| 亚洲精品久久久久久久蜜桃| 挺进毛还没长稚嫩的小花苞网种| 久久久国产精品无码一区二区三区| 国产日产久久高清欧美一区| 永久免费的啪啪网站免费观看浪潮 | 狠狠噜天天噜日日噜视频麻豆 | 亚洲av无码国产精品久久不卡| 久久久久久久无码高潮| 国产精品人成视频免费播放| 国产无遮挡吃胸膜奶免费看| 日韩精品无码一区二区三区不卡| 国产成人精品久久| 2022国产成人精品视频人| gogo西西人体做爰大胆视频图|