Press "Enter" to skip to content

设计模式—门面模式

门面模式(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中的代码。

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax