应用:
GateWay网关就是Facade门面模式
消息中间件就是Mediator调停者模式。
具体利用坦克大战的java版的游戏来看
package com.wwj.tank;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
/**
* @author wwj
*/
public class GameMode extends Frame {
private static final GameMode instance = new GameMode();
private Tank myTank = new Tank(200,200,Dir.DOWN,Group.GOOD);
public static final int GAMEWIDTF = 800,GAMEHEIGHT=600;
private ArrayList<GameObject> gameObjects = new ArrayList<>();
ColliderChain colliderChain = new ColliderChain();
public void add(GameObject gameObject){
this.gameObjects.add(gameObject);
}
public void remove(GameObject gameObject){
this.gameObjects.remove(gameObject);
}
private GameMode(){
this.setSize(GAMEWIDTF,GAMEHEIGHT);
this.setResizable(false);
this.setTitle("Tank Game");
this.setVisible(true);
this.addKeyListener(new MyKeyListing());
this.setBackground(Color.BLACK);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static GameMode getInstance(){
return instance;
}
public void paint(Graphics g){
//画出界面提示
g.setColor(Color.WHITE);
//将元素全部画出
myTank.paint(g);
for(int index = 0; index < gameObjects.size();index++){
gameObjects.get(index).paint(g);
}
//子弹与坦克的碰撞检测
for (int i = 0; i < gameObjects.size(); i++) {
for (int j = i+1; j < gameObjects.size(); j++) {
GameObject o1 = gameObjects.get(i);
GameObject o2 = gameObjects.get(j);
colliderChain.collide(o1,o2);
}
}
}
对于多个游戏物体而言GameMode就是调停者
对于main方法看GameMode就是门面
(概念性比较强,理解这种模式的感觉)