设计模式读书笔记之外观模式/门面模式(Facade)

门面模式:为多个子系统提供统一的高层接口,以降低客户对子系统的依赖, 减少客户使用子系统的难度.
设计模式读书笔记之外观模式/门面模式(Facade)
 门面模式是一个名字和描述都让人感觉很难的模式,我也曾经被它的名字吓倒过。其实门面模式很简单, 就是要把下面的上图结构变为下图结构。


设计模式读书笔记之外观模式/门面模式(Facade)
设计模式读书笔记之外观模式/门面模式(Facade)

基础代码:

//子系统1
package designpattern.facade;
public class SubSystem1 {
	public void method1(){
		//
	}
	public void method2(){
		//
	}
	public void method3(){
		//
	}
}
//子系统2
package designpattern.facade;
public class SubSystem2 {
	public void method1(){
		//
	}
	public void method2(){
		//
	}
	public void method3(){
		//
	}
}
//子系统3
package designpattern.facade;
public class SubSystem3 {
	public void method1(){
		//
	}
	public void method2(){
		//
	}
	public void method3(){
		//
	}
}
//门面
package designpattern.facade;
public class Facade {
	private SubSystem1 sub1;
	private SubSystem2 sub2;
	private SubSystem3 sub3;
	public Facade(SubSystem1 sub1, SubSystem2 sub2, SubSystem3 sub3){
		this.sub1 = sub1;
		this.sub2 = sub2;
		this.sub3 = sub3;
	}
	public void doThis(){
		sub1.method1();
		sub2.method1();
		sub3.method1();
	}
	
	public void doThat(){
		sub2.method2();
		sub3.method3();
		//......
	}
}
//客户/上下文
package designpattern.facade;

public class Client {
	private Facade facade;
	public Client(Facade f){
		this.facade = f;
	}
	public void doSomething(){
		facade.doThat();
		//facade.doThis();
		//.....
	}
}

举一例: 汽车分好多子系统: 发动机, 刹车系统, 变速系统, 电子系统..... 如果司机在开车的时候要直接和这些子系统打交道, 那这个车没办法开了,因为这个难度太大. 于是于是有了驾驶室这个操作平台, 由驾驶室里面的油门, 刹车, 换档把手, 手札, 开关按钮来和这些子系统打交道. 而客户(即驾驶员)只需要坐在驾驶室里就可以操控整个车. 这个驾驶室就是这整个汽车全部系统的门面.

特点:

1 外观类持有各个子系统的引用;

2 外观类通过调用各个子系统的功能来为用户提供高层接口.

适应场景: 子系统比较多而且复杂

 

你可能感兴趣的:(设计模式,F#,读书)