【设计模式】 外观模式

系列文章目录


文章目录


本篇文章我们以股民炒股这一事件为例,下面我们来看第一版代码

股民炒股代码

java 复制代码
  class Stock1{
        public void sell(){
            System.out.println("股票1卖出");
        }
        public void buy(){
            System.out.println("股票1买入");
        }
    }
    class Stock2{
        public void sell(){
            System.out.println("股票2卖出");
        }
        public void buy(){
            System.out.println("股票2买入");
        }
    }
    class NationalDebt1{
        public void sell(){
            System.out.println("国债1卖出");
        }
        public class buy(){
            System.out.println("国债1买入");
        }
    }
    //房地产类
    class Realty1{
        public void sell(){
            System.out.println("房地产1卖出");
        }
        public void buy(){
            System.out.println("房地产1买入");
        }
    }

    public static void main(String[] args) {
        Stock1 stock1 = new Stock1();
        Stock1 stock2 = new Stock2();
        NationalDebt1 nationalDebt1 = new NationalDebt1();
        Realty1 realty1 = new Realty1();
        stock1.buy();
        stock2.buy();
        nationalDebt1.buy();
        realty1.buy();
        
        stock1.sell();
        stock2.sell();
        nationalDebt1.sell();
        realty1.sell();
    }

如果我们是投资基金的话,那么就是将我们的钱交给基金来去炒股,此时有第二版代码投资基金代码。

投资基金代码

基金代码如下

java 复制代码
 //基金类如下
 class Fund{
        Stock1 stock1;
        Stock2 stock2;
        NationalDebt1 nationalDebt1;
        Realty1 realty1;
        public Fund(){
            stock1 = new Stock1();
            stock2 = new Stock2();
            nationalDebt1 = new NationalDebt1();
            realty1 = new Realty1();
        }
        public void buyFund(){
            
            stock1.buy();
            stock2.buy();
            nationalDebt1.buy();
            realty1.buy();
        }
        public void sellFund(){
            stock1.sell();
            stock2.sell();
            
            nationalDebt1.sell();
            realty1.sell();
        }
        //基金类可以有很多买入卖出操作,持仓比例等
        //这里无须告知客户
        
    }
    //客户端
    public static void main(String[] args){
    		Fund fund1 = new Fund();
    		//基金购买
    		fund1.buyFund();
    		//基金赎回
    		fund1.sellFund();
    }

外观模式

外观模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

下面是外观模式的代码示例:

java 复制代码
//子系统1
    class SubSystemOne{
        public void methodOne(){
            System.out.println("子系统方法一");
        }
    }
    //子系统2
    class SubSystemTwo{
        public void methodTwo(){
            System.out.println("子系统方法二");
        }
    }
    //子系统三
    class SubSystemThree{
        public void methodThree(){
            System.out.println("子系统方法三");
        }
    }

    //子系统四
    class SubSystemFour{
        public void methodFour(){
            System.out.println("子系统方法四");
        }
    }
    
    
    //外观类
    class Facade{
        SubSystemOne one;
        SubSystemTwo two;
        SubSystemThree three;
        SubSystemFour four;
        public Facade(){
            one = new SubSystemOne();
            two = new SubSystemTwo();
            three = new SubSystemThree();
            four = new SubSystemFour();
        }
        public void methodA(){
            one.methodOne();;
            two.methodTwo();
            three.methodThree();
            four.methodFour();
        }
        public void methodB(){
            two.methodTwo();
            three.methodThree();
        }
    }
    
    //客户端调用
    public static void main(String[] args) {
        Facade facade = new Facade();
        
        // 由于Facade的作用,客户端可以根本不知道其他四个子系统类的作用
        facade.methodA();
        facade.methodB();
    }

何时使用外观模式

对于何时使用外观模式,我们要分三个阶段来说

首先,在设计初期阶段,就应该要有意识地将不同的两个层分离, 比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低,其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂, 大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用他们的用户程序带来了使用上的困难,增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了, 但因为他包含非常重要的功能,新的需求开发必须要依赖于它,此时用外观模式Facade也是非常合适的,我们可以为新系统开发一个外观类Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统于Facade对象交互,Facade与遗留代码交互所有复杂的工作。

总结

以上就是本文全部内容,本文主要向大家介绍了设计模式中的外观模式,通过炒股代码更改为基金类代码,来引出外观模式代码的大致模板。感谢各位能够看到最后,如有问题,欢迎各位大佬在评论区指正,希望大家可以有所收获!创作不易,希望大家多多支持!

相关推荐
deepwater_zone3 小时前
设计模式(策略,观察者,单例,工厂方法)
设计模式
宁静致远20217 小时前
【C++设计模式】第三篇:观察者模式(别名:发布-订阅模式、模型-视图模式、源-监听器模式)
c++·观察者模式·设计模式
User_芊芊君子10 小时前
【Java】设计模式——单例、工厂、代理模式
java·设计模式·代理模式
YA33313 小时前
java设计模式二、工厂
java·开发语言·设计模式
烛阴1 天前
【TS 设计模式完全指南】从零到一:掌握TypeScript建造者模式,让你的对象构建链式优雅
javascript·设计模式·typescript
yvya_1 天前
常见设计模式详解
设计模式
至此流年莫相忘1 天前
设计模式:模板方法模式
java·开发语言·设计模式
o0向阳而生0o1 天前
100、23种设计模式之适配器模式(9/23)
设计模式·适配器模式
将编程培养成爱好1 天前
C++ 设计模式《外卖菜单展示》
c++·设计模式