欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Java

java 外观(Facade)模式的经典案例

程序员文章站 2024-01-31 15:39:48
...
类图:

java 外观(Facade)模式的经典案例


/**
 * 角色
 * @author stone
 *
 */
public class Actor {
	public Actor(String name) {
		System.out.println("创建了角色: " + name);
	}
	
	public void load() {
		System.out.println("角色加载");
	}
	
	public void unload() {
		System.out.println("角色退出,存档");
	}
}
/**
 * 场景
 * @author stone
 *
 */
public class Scene {
	public Scene(String name) {
		System.out.println("创建了场景: " + name);
	}
	
	public void load() {
		System.out.println("场景加载");
	}
	
	public void unload() {
		System.out.println("场景卸载");
	}
}


/**
 * 外观类,即一个业务功能类,它的实现需要持有其他具体的 业务对象
 * @author stone
 *
 */
public class Facade {
	Actor actor;
	Scene scene;
	
	public Facade() {
		this.actor = new Actor("lisi");
		this.scene = new Scene("海天盛宴");
	}
	
	public void startGame() {
		actor.load();
		scene.load();
	}
	
	public void endGame() {
		actor.unload();
		scene.unload();
	}
}


/**
 * 外观(Facade)模式
 * 		简单的说就是降低了类与类之间的耦合度,使用一个Facade类来持有原有类的引用。它使用的频率其实非常的高
 * 跟静态代理在实现上有些类似,不同的是,外观模式中可以持有多个实体对象的引用,进行组合实现业务功能
 * @author stone
 *
 */
public class Test {
	public static void main(String[] args) {
		/*
		 * 如果不使用外观模式,那么在Actor和Scene可能至少一方需要持有对方的引用
		 * 当需要添加新的具体功能类时,只需要在Facade中添加一个引用,在相应的周期函数中使用即可
		 */
		Facade facade = new Facade();
		facade.startGame();
		System.out.println("----");
		facade.endGame();
	}
}

打印:

创建了角色: lisi
创建了场景: 海天盛宴
角色加载
场景加载
----
角色退出,存档
场景卸载

以上就是java 外观(Facade)模式的经典案例的详细内容,更多请关注其它相关文章!