设计模式--外观模式

例如 你到政府部门去办事情,你需要到部门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公司这些打交道

 

 

 

 

复制代码

 

posted on   luzhouxiaoshuai  阅读(135)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示