设计模式--外观模式

例如 你到政府部门去办事情,你需要到部门1办事情,然后再去部门2去办事情,后面有了一站式窗口之后,你只需要把表交给一站式窗口。一站式窗口在去部门1和部门2去办事情,客户不用和模块a和b打交道

案例2:

客户要自己组装电脑,客户需要自己去买cpu  去买电源 去买风扇灯,然后把电脑装起来,相当的麻烦

客户其实只要把电脑需要的配置告诉给电脑装修公司,由装电脑公司去把电脑装好

我们来看一个简单的外观模式的案例:

package cn.javass.dp.facade.example2;
/**
 * A模块的接口
 */
public interface AModuleApi {
    /**
     * 示意方法,A模块对外的一个功能方法
     */
    public void testA();
}
package cn.javass.dp.facade.example2;

public class AModuleImpl implements AModuleApi{
    public void testA() {
        System.out.println("现在在A模块里面操作testA方法");
    }
}
package cn.javass.dp.facade.example2;

public interface BModuleApi {
    public void testB();
}、

package cn.javass.dp.facade.example2;

public class BModuleImpl implements BModuleApi{

    
    public void testB() {
        System.out.println("现在在B模块里面操作testB方法");
    }

}

package cn.javass.dp.facade.example2;

public interface CModuleApi {
    public void testC();
}
package cn.javass.dp.facade.example2;

public class CModuleImpl implements CModuleApi{

    
    public void testC() {
        System.out.println("现在在C模块里面操作testC方法");
    }

}
package cn.javass.dp.facade.example2;
/**
 * 外观对象
 */
public class Facade {
    /**
     * 示意方法,满足客户需要的功能
     */
    public void test(){
        //在内部实现的时候,可能会调用到内部的多个模块
        AModuleApi a = new AModuleImpl();
        a.testA();
        BModuleApi b = new BModuleImpl();
        b.testB();
        CModuleApi c = new CModuleImpl();
        c.testC();
    }
}
package cn.javass.dp.facade.example2;

public class Client {
    public static void main(String[] args) {
//        //不用Facade,需要自己跟多个模块交互
//        AModuleApi a = new AModuleImpl();
//        a.testA();
//        BModuleApi b = new BModuleImpl();
//        b.testB();
//        CModuleApi c = new CModuleImpl();
//        c.testC();
//        
//        System.out.println("使用Facade----------------------〉");
        //使用了Facade
        new Facade().test();        
    }
}

所谓的设计模式的本质就是有了接口,有了接口的具体实现类,然后才有设计模式,例如简单工厂模式,有了业务接口,有课业务接口的具体实现类,然后才引入工厂模式,工厂模式能够依据客户的参数需求,选择不同的具体现实类。

外观模式本质上也是一样的,通过外观模式来实现用户的需求

注意点:facade需要知道系统内部的模块a,模块b,facade屏蔽了系统内部和客户端的关系,当系统内部的模块功能发送改变的时候,客户端是不知道的,例如装修电脑,转机公司要到去买电源,装机公司需要去买cpu,客户不直接和cpu公司这些打交道

 

原文地址:https://www.cnblogs.com/kebibuluan/p/7259054.html