外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
举个例子,比如我们最习以为常吃饭,如果是自己做的话,那么需要经历买菜、洗菜、切菜、炒菜、吃、善后工作等,这几个顺序是肯定不能乱的,而且缺一不可。刚上了一天的班想吃个饭还要这么麻烦,想想就累。那么怎么解决呢?简单的做法就是就是饭店吃饭,在饭店吃饭我们只需要告诉厨师我们想吃什么,然后那些复杂的工序就让他去做,我们就负责吃就好了。
一、创建一个烹饪的接口
public interface Cook {
// 买菜
public void buyVegetables(String vegetables);
// 洗菜
public void washVegetables();
// 烹饪(口味)
public void cookVegetables(String flavour);
// 吃
public void eat();
}
二、烹饪的具体实现
public CookImpl implements interface Cook {
// 买菜
public void buyVegetables(String vegetables){
System.out.println("去菜市场买了"+ vegetables);
}
// 洗菜
public void washVegetables(){
System.out.println("洗菜");
}
// 烹饪(口味)
public void cookVegetables(String flavour){
System.out.println("开始做菜,烧成"+flavour);
}
// 吃
public void eat(){
System.out.println("可以吃了!");
}
}
三、饭店实现
public class Restaurant {
Cook cook = new CookImpl();
public void cook(String vegetables,String falvour){
cook.buyVegetables(vegetables);
cook.washVegetables();
cook.cookVegetables(falvour);
cook.eat();
}
}
四、测试,相当于我们到饭店去
public class Client (){
public static void main(String[] args){
Restaurant res = new Restaurant();
String vegetables = "花菜";
String flavour = "麻辣味";
res.cook(vegetables,flavour);
}
}
通过这四步,我们就能够很明显的感到简化了很多的流程,只需要告诉饭店我们要什么?有什么要求? 然后就坐等吃饭就好了,这后面所有复杂的重复的工作 都由饭店去做。因为不管是谁来吃饭,无外乎吃什么 什么味,而买菜之类的重复性的工作就不要我们亲自去做了。把复杂的逻辑隐藏起来 给提供给我们必要的接口,这算是外观模式的根本了吧。