门面模式(Facade)是结构型设计模式,它的作用是为客户端提供一个简单易用的接口,统一执行一些功能;当然,客户端也可以不使用它,自己去对这些功能进行细致的操作与控制。
比如我们现在的手机照相,通常有一个自动(Auto)模式,适合于不太会设置光圈对比度之类东西的用户使用,但是它的手动模式则适合高级用户使用,用户可以自己细致操作每一个步骤,代价是使用更繁琐。这里的自动模式就是一个门面。
又比如在公司里普通职工需要自己完成买食物,日用品等行为;但是老板会有秘书代替他完成,老板不必自己亲自去做每一件事情,这里的秘书就是一个门面。
如下为代码示例:
package DesignPattern;
public class Facade {
public static void main(String[] args) {
//staff
System.out.println("---staff---");
new Restaurant().buyFood();
new Hotel().checkIn();
new Supermarket().buyGoods();
//boss
System.out.println("---boss---");
new Secretary().operation();
}
}
class Secretary {
Hotel hotel = new Hotel();
Restaurant res = new Restaurant();
Supermarket sup = new Supermarket();
void operation() {
hotel.checkIn();
res.buyFood();
sup.buyGoods();
}
}
class Hotel {
void checkIn() {
System.out.println("Check in ");
}
}
class Restaurant {
void buyFood() {
System.out.println("Buy food ");
}
}
class Supermarket {
void buyGoods() {
System.out.println("Buy goods ");
}
}
/*
output
---staff---
Buy food
Check in
Buy goods
---boss---
Check in
Buy food
Buy goods
*/
门面模式的缺点就是不符合开闭原则,如果有了新的要做的事情,就得修改Secretary中的代码。