设计模式之门面模式

模式定义:
        为子系统中的一组接口提供一个统一的高层接口,使子系统更容易使用。该模式通过外观接口与子系统
        交互,而不与具体的子系统中的细节交互。【分层结构、MVC、WEB应用中的三层结构】
遵循原则:
        迪米特原则--最少知识原则,你不需要知道的你就不要知道,你知道干什么?;
        封装变化部分。
适用场合:
        (1)一个系统复杂度比较高,需要一个更高级别的简单接口来简化对子系统的调用;
        (2)端与端之间联系太复杂,需要进行抽象,减少耦合性,层级化子系统。
知识扩展:

        JDK中的Logger、SL4J就是典型的实践者,另外WEB的层级结构就是最好的诠释。

public interface ISpareribs {

    public void juice();

    public void fry();

    public void preserve();

    public void prepare();

}
做一顿饭需要很多步骤
public class Spareribs implements ISpareribs {

    @Override
    public void fry() {
        System.out.println("翻炒许。。。然后。。。。。。。。。。。。。。。");
    }

    @Override
    public void juice() {
        System.out.println("最后浇汁。。。倥焖。。。。。。。。。。。。。。。");
    }

    @Override
    public void prepare() {
        System.out.println("准备少许。。。一克。。。。。。。。。。。。。。。");
    }

    @Override
    public void preserve() {
        System.out.println("将排骨。。。生姜。。。。。。。。。。。。。。。");
    }

}


/**
 * 向外界公布的接口,就是做糖醋排骨,细节就不要管了
 * @author xsy
 *
 */
public interface ICookFacade {
    public void cookSpareribs();
}

public class CookFacade implements ICookFacade {

    private final ISpareribs spareribs = new Spareribs();
    @Override
    public void cookSpareribs() {
        spareribs.prepare();
        spareribs.preserve();
        spareribs.fry();
        spareribs.juice();
    }

}

测试

public class Client {
    public static void main(String[] args) {
        //我客户端只管吃,不管怎么做的
//        ISpareribs spareribs = new Spareribs();
//        spareribs.prepare();
//        spareribs.preserve();
//        spareribs.fry();
//        spareribs.juice();
        
        ICookFacade cookFacade = new CookFacade();
        cookFacade.cookSpareribs();
    }

}



你可能感兴趣的:(设计模式之门面模式)