设计模式-外观模式(门面模式)

 

外观模式 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更容易使用。
 
例子:
 
假如我现在要买3支股票,等收益了在卖出,那么现在是这样的
1.定义三只股票
复制代码
//股票1
class shares1{
    public void buy1(){
        System.out.println("股票1买入");
    };

    public void sell1(){
        System.out.println("股票1卖出");
    };
}
//股票2
class shares2{
    public void buy2(){
        System.out.println("股票2买入");
    };

    public void sell2(){
        System.out.println("股票2卖出");
    };
}
//股票3
class shares3{
    public void buy3(){
        System.out.println("股票3买入");
    };

    public void sell3(){
        System.out.println("股票3卖出");
    };
}
复制代码

 

2.操作买入和卖出

复制代码
public static void main(String[] args) {
    shares1 shares1 = new shares1();
    shares2 shares2 = new shares2();
    shares3 shares3 = new shares3();
    shares1.buy1();
    shares2.buy2();
    shares3.buy3();

    shares1.sell1();
    shares2.sell2();
    shares3.sell3();
}
复制代码

 

但是这样太麻烦了,使用了外观模式之后 就相当于是买了基金,我不需要甚至是不知道有股票的存在,操作基金的买入卖出即可。其实就是加了一层而已。
 
增加基金,用基金来操作股票,股票的三个类不变
复制代码
//基金
class Fund {
    private Shares1 shares1;
    private Shares2 shares2;
    private Shares3 shares3;

    public Fund(Shares1 shares1, Shares2 shares2, Shares3 shares3) {
        this.shares1 = shares1;
        this.shares2 = shares2;
        this.shares3 = shares3;
    }

    public void buy(){
        shares1.buy1();
        shares2.buy2();
        shares3.buy3();
    }

    public void sell(){
        shares1.sell1();
        shares2.sell2();
        shares3.sell3();
    }
}
复制代码

 

买卖改为买卖基金
public static void main(String[] args) {
    Fund fund = new Fund(new Shares1(), new Shares2(), new Shares3());
    fund.buy();
    fund.sell();
}

 

总结:

外观模式本质就是加一层,用来封装复杂的功能,提供一个统一的入口,使得调用方无须知道细节逻辑
 
代理模式和外观模式的的区别
代理模式强调的是一对一,一个代理类代理一个类
外观模式强调的是一对多,一个外观类对应多个类

 

posted @   知识海洋中的浮萍  阅读(32)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示