【设计模式】结构型03外观模式(Facade Pattern)

【设计模式】结构型02装饰模式(Decorator Pattern)

意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

何时使用:1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。2、定义系统的入口。

如何解决:客户端不与系统耦合,外观类与系统耦合。


代码:

1、我这里有一个服务接口,持有一个对外提供服务的共有方法 provide(),本接口有三个实现类,分别是音乐窗口、视频窗口和学习窗口类:

package com.pat.facade;
/**
 * 外观模式,被统筹类的接口
 * @author ZX
 */
public interface ServiceWindows {
	//提供服务的方法
	void provide();
}
/**
 * 音乐播放器接口
 * @author ZX
 *
 */
class Music implements ServiceWindows{
	@Override
	public void provide() {
		System.out.println("播放音乐~我的滑板鞋~滑板鞋~鞋~");
	}
	
}
/**
 * 视频播放器接口
 * @author ZX
 *
 */
class Video implements ServiceWindows{
	@Override
	public void provide() {
		System.out.println("播放视频~非洲农业不发达~就用金坷垃~~~");
	}
	
}
/**
 * 学习资料接口
 * @author ZX
 */
class Study implements ServiceWindows{
	@Override
	public void provide() {
		System.out.println("学习资料.zip》重命名 学习资料.avi");
		System.out.println("开始播放:学习资料.avi");
	}
	
}

2、外观模式核心,提供一个面板类阻止对象,本类就是外观模式的核心:

package com.pat.facade;
/**
 * 外观模式核心-更高层的和新接口控制器,至于对象的创建可使用任何方式,这里采用最简单的方式
 * @author ZX
 *
 */
public class FacadeController {
	private ServiceWindows music;
	private ServiceWindows video;
	private ServiceWindows studyData;
	
	public FacadeController() {
		this.music = new Music();
		this.video= new Video();
		this.studyData= new Study();
	}
	
	
    public void playMusic() {
    	music.provide();
    }
    public void playVideo() {
    	video.provide();
    }
    public void beginStudy() {
    	studyData.provide();
    }
}

3、测试类:

package com.pat.facade;
/**
 * 测试类
 * @author ZX
 *
 */
public class Test {
	public static void main(String[] args) {
		FacadeController fc = new  FacadeController();
		fc.playMusic();
		fc.playVideo();
		fc.beginStudy();
	}
}

4、结果:

播放音乐~我的滑板鞋~滑板鞋~鞋~
播放视频~非洲农业不发达~就用金坷垃~~~
学习资料.zip》重命名 学习资料.avi
开始播放:学习资料.avi

原文地址:https://www.cnblogs.com/the-fool/p/11054134.html