本篇內(nèi)容介紹了“什么是行為型模式”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站專(zhuān)注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、安溪網(wǎng)絡(luò)推廣、小程序制作、安溪網(wǎng)絡(luò)營(yíng)銷(xiāo)、安溪企業(yè)策劃、安溪品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供安溪建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:jinyejixie.com
這個(gè)模式可以說(shuō)用得比較少,至少再我真正學(xué)習(xí)之前是沒(méi)有用過(guò)的,甚至沒(méi)有聽(tīng)過(guò)的。在空對(duì)象模式中,一個(gè)空對(duì)象取代NULL對(duì)象實(shí)例的檢查。NULL對(duì)象不是檢查控制,而是反應(yīng)一個(gè)不做任何動(dòng)作的關(guān)系。
AbstractClass:抽象出來(lái)的對(duì)象,具有一定的邏輯
RealClass:真正的對(duì)象
NullObject:空對(duì)象
AbstractClass
public abstract class AbstractClass { public abstract void print(); public abstract void isNullObject(); }
RealClass
public class RealClass extends AbstractClass { @Override public void print() { System.out.println("real class: hello world"); } @Override public void isNullObject() { System.out.println("i am real object"); } }
NullClass
public class NullClass extends AbstractClass { @Override public void print() { System.out.println("do nothing"); } @Override public void isNullObject() { System.out.println("do nothing"); } }
為了方便演示,還增加了一個(gè)工廠類(lèi)用來(lái)隨機(jī)生成是RealClass
還是NullClass
ObjectFactory
public class ObjectFactory { public static AbstractClass getObjectClass() { if (Math.random() * 10 > 4) { return new RealClass(); } return new NullClass(); } }
Client
public class Client { public static void main(String[] args) { for (int i = 0; i < 10; i++) { ObjectFactory.getObjectClass().isNullObject(); ObjectFactory.getObjectClass().print(); } } }
就是這么樸實(shí)無(wú)華,但是確實(shí)是用得比較少,上網(wǎng)一搜甚至很多標(biāo)題都是被遺棄的設(shè)計(jì)模式。
訪問(wèn)者模式的目的是要把處理從數(shù)據(jù)結(jié)構(gòu)中分離出來(lái),其優(yōu)點(diǎn)是增加新的操作很容易,因?yàn)樵黾有碌牟僮骶鸵詾橹黾右粋€(gè)新的訪問(wèn)者。
通俗地來(lái)說(shuō),把數(shù)據(jù)抽象成一類(lèi),把操作抽象成一類(lèi)。拿王者榮耀舉例,最典型的就是英雄算是數(shù)據(jù),玩家就是訪問(wèn)者,新增一個(gè)玩家只需要新增一個(gè)具體訪問(wèn)者即可。
Element:抽象出來(lái)的元素,里面有個(gè)accept方法來(lái)接受訪問(wèn)者的訪問(wèn),對(duì)應(yīng)例子就是英雄的抽象類(lèi)
Concrete Element:具體的元素,對(duì)應(yīng)就是具體的某個(gè)英雄
Visitor:訪問(wèn)者,一般需要包含訪問(wèn)所有具體元素的抽象方法,對(duì)應(yīng)游戲就是玩家的抽象類(lèi)
Concrete Element:具體的訪問(wèn)者,對(duì)應(yīng)到例子就是不同的具體的玩家
Visitor
public abstract class VisitorPlayer { public abstract void visit(ConcreteElementGuangYu guangYu); public abstract void visit(ConcreteElementMaKe maKe); }
Element
public abstract class ElementHero { public abstract void accept(VisitorPlayer visitorPlayer); public void normalAttack() { System.out.println("浦東公雞"); } public abstract void firstSkill(); public abstract void secondSkill(); public abstract void thirdSkill(); }
ConcreteElement
public class ConcreteElementGuangYu extends ElementHero{ @Override public void accept(VisitorPlayer visitorPlayer) { System.out.println("您已選擇英雄"); visitorPlayer.visit(this); } @Override public void firstSkill() { System.out.println("單刀赴會(huì)"); } @Override public void secondSkill() { System.out.println("青龍偃月"); } @Override public void thirdSkill() { System.out.println("刀鋒鐵騎"); } }
public class ConcreteElementMaKe extends ElementHero{ @Override public void accept(VisitorPlayer visitorPlayer) { System.out.println("您已經(jīng)選擇該英雄"); visitorPlayer.visit(this); } @Override public void firstSkill() { System.out.println("華麗左輪"); } @Override public void secondSkill() { System.out.println("漫游之槍"); } @Override public void thirdSkill() { System.out.println("狂熱彈幕"); } }
ConcreteVisitor
public class ConcreteVisitorPlayerA extends VisitorPlayer{ @Override public void visit(ConcreteElementGuangYu guangYu) { guangYu.thirdSkill(); guangYu.secondSkill(); guangYu.normalAttack(); guangYu.normalAttack(); guangYu.normalAttack(); guangYu.firstSkill(); } @Override public void visit(ConcreteElementMaKe maKe) { maKe.secondSkill(); maKe.firstSkill(); maKe.normalAttack(); maKe.normalAttack(); maKe.thirdSkill(); } }
public class ConcreteVisitorPlayerB extends VisitorPlayer { @Override public void visit(ConcreteElementGuangYu guangYu) { guangYu.normalAttack(); guangYu.normalAttack(); guangYu.firstSkill(); guangYu.normalAttack(); } @Override public void visit(ConcreteElementMaKe maKe) { maKe.secondSkill(); maKe.firstSkill(); maKe.normalAttack(); maKe.firstSkill(); maKe.secondSkill(); } }
為了更方便使用,一般還有有一個(gè)ObjectStructure
類(lèi),這個(gè)類(lèi)主要是為了構(gòu)建結(jié)構(gòu)關(guān)系的
ObjectStructure
public class ObjectStructure { private List<ElementHero> elementHeroes = new ArrayList<>(); public void attach(ElementHero hero) { elementHeroes.add(hero); } public void detach(ElementHero hero) { elementHeroes.remove(hero); } public void accept(VisitorPlayer player) { for (ElementHero elementHero : elementHeroes) { elementHero.accept(player); } } }
Client
public class Client { public static void main(String[] args) { ObjectStructure objectStructure = new ObjectStructure(); objectStructure.attach(new ConcreteElementGuangYu()); objectStructure.attach(new ConcreteElementMaKe()); ConcreteVisitorPlayerA concreteVisitorPlayerA = new ConcreteVisitorPlayerA(); ConcreteVisitorPlayerB concreteVisitorPlayerB = new ConcreteVisitorPlayerB(); System.out.println("玩家A開(kāi)始操作"); objectStructure.accept(concreteVisitorPlayerA); System.out.println("玩家B開(kāi)始操作"); objectStructure.accept(concreteVisitorPlayerB); } }
“什么是行為型模式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
文章題目:什么是行為型模式
鏈接分享:http://jinyejixie.com/article6/iehdig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、自適應(yīng)網(wǎng)站、外貿(mào)建站、定制開(kāi)發(fā)、虛擬主機(jī)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)