王者荣耀是由多人协同开发而成,每个人负责游戏的一个或多个子功能,一个完整的功能是由很多已开发的子功能组合成的。我们要玩游戏时,只需要打开王者荣耀APP,无需知道具体有哪些功能被调用,系统会自动来完成游戏初始化过程(检查版本更新、校验安装包,加载登陆动图,加载背景音乐……)
外观模式(Facade Pattern)外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这一接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式
外观模式的通用类图:
外观模式所涉及的角色有:
● Facade(外观角色):在客户端可以调用这个角色的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;在正常情况下,他将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理。
● SubSystem(子系统角色):在软件系统中可以同时有一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能;每个子系统都可以被客户端直接调用,或者被外观角色调用,它处理从外观类传过来的请求;子系统并不知道外观的存在,对于子系统而言,外观仅仅是另一个客户端而已。
GameFacade类(外观类)
package com.practice.Facade;
import com.practice.SubSystem.CheckUpdate;
import com.practice.SubSystem.GameProcess;
import com.practice.SubSystem.InitializeResource;
import com.practice.SubSystem.LoadMusic;
import com.practice.SubSystem.OverloadGif;
import com.practice.SubSystem.VerifyPackage;
/*
* 外观角色类
*/
public class GameFacade {
CheckUpdate cu;
VerifyPackage vp;
InitializeResource ir;
OverloadGif og;
LoadMusic lm;
GameProcess gp;
public GameFacade(CheckUpdate cu,VerifyPackage vp,InitializeResource ir,OverloadGif og,LoadMusic lm,GameProcess gp) {
this.cu = cu;
this.vp = vp;
this.ir = ir;
this.og = og;
this.lm = lm;
this.gp = gp;
}
//打开游戏,调用各子系统方法
public void GameOpen(String game) throws InterruptedException {
System.out.println("Get ready to play a game!");
cu.CheckOn();
vp.VerifyOn();
ir.Initial();
og.OverloadGifOn();
lm.LoadingMusic();
gp.gameStart();
}
//游戏结束
public void GameClose() throws InterruptedException{
gp.GameOver();
}
}
CheckUpdate类(检查版本更新子系统)
package com.practice.SubSystem;
/*
* 检查版本更新子系统
*/
public class CheckUpdate {
public void CheckOn() throws InterruptedException {
System.out.println("正在为您检测版本更新……");
Thread.sleep(2000);
CheckOff();
}
public void CheckOff() {
System.out.println("检测为最新版本");
}
}
GameProcess类(游戏进程子系统)
package com.practice.SubSystem;
/*
* 游戏进程子系统(开始/结束)
*/
public class GameProcess {
public void gameStart() throws InterruptedException {
System.out.println("游戏开始!");
for(int i=10;i>0;i--) {
System.out.println("游戏中--"+i);
Thread.sleep(1000);
}
}
public void GameOver() {
System.out.println("游戏结束");
}
}
*** InitializeResource类(初始化资源子系统)***
package com.practice.SubSystem;
/*
* 初始化资源管理子系统
*/
public class InitializeResource {
public void Initial() throws InterruptedException{
System.out.println("正在初始化资源管理……");
Thread.sleep(2000);
InitialOff();
}
public void InitialOff() {
System.out.println("初始化完成!");
}
}
LoadMusic类(加载背景音乐子系统)
package com.practice.SubSystem;
/*
* 加载音乐子系统
*/
public class LoadMusic {
public void LoadingMusic() throws InterruptedException{
System.out.println("正在加载背景音乐……");
Thread.sleep(1000);
LoadingMusicOver();
}
public void LoadingMusicOver() {
System.out.println("背景音乐加载完成");
}
}
OverloadGif类(加载登陆动图类)
package com.practice.SubSystem;
/*
* 加载动画子系统
*/
public class OverloadGif {
public void OverloadGifOn() throws InterruptedException{
System.out.println("正在加载界面动画……");
Thread.sleep(1000);
OverloadGifOff();
}
public void OverloadGifOff() {
System.out.println("界面动画加载完成!");
}
}
VerifyPackage类(校验安装包类)
package com.practice.SubSystem;
/*
* 校验安装包子系统
*/
public class VerifyPackage {
public void VerifyOn() throws InterruptedException {
System.out.println("正在为您校验安装包……");
Thread.sleep(1000);
VerifyOff();
}
public void VerifyOff() {
System.out.println("校验完成!");
}
}
FacadeTest类(测试类)
package com.practice.Client;
import com.practice.Facade.GameFacade;
import com.practice.SubSystem.CheckUpdate;
import com.practice.SubSystem.GameProcess;
import com.practice.SubSystem.InitializeResource;
import com.practice.SubSystem.LoadMusic;
import com.practice.SubSystem.OverloadGif;
import com.practice.SubSystem.VerifyPackage;
/*
* 测试类
*/
public class FacadeTest {
public static void main(String [] args) throws InterruptedException {
//初始化组件
CheckUpdate cu = new CheckUpdate();
VerifyPackage vp = new VerifyPackage();
InitializeResource ir = new InitializeResource();
OverloadGif lg = new OverloadGif();
LoadMusic lm = new LoadMusic();
GameProcess gp = new GameProcess();
GameFacade gf = new GameFacade(cu,vp,ir,lg,lm,gp);
gf.GameOpen("Glory to the king");//打开游戏
gf.GameClose();//关闭游戏
}
}
原文:https://www.cnblogs.com/miaowulj/p/11966650.html