【设计模式】 外观模式

系列文章目录


文章目录


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

股民炒股代码

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与遗留代码交互所有复杂的工作。

总结

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

相关推荐
七月丶1 天前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR
人工智能·设计模式·程序员
刀法如飞1 天前
从程序员到架构师:6大编程范式全解析与实践对比
设计模式·系统架构·编程范式
九狼1 天前
Flutter + Riverpod +MVI 架构下的现代状态管理
设计模式
静水流深_沧海一粟2 天前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder2 天前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
阿星AI工作室2 天前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦3 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
阿闽ooo6 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4966 天前
js设计模式 --- 工厂模式
设计模式