• 设计模式学习--外观模式


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

    外观模式结构图:

    案例需求:新股民对股票不熟悉,买基金,基金的专业人士拿新股民的钱去购买股票。

    1:创建三个股票类和一个国债类。

    package FacadeModel;
    
    /**
     * 股票1
     * @author 我不是张英俊
     *
     */
    public class Stock1 {
        
        //卖股票
        public void sell(){
            System.out.println("股票1卖出");
        }
        //买股票
        public void buy(){
            System.out.println("股票1买入");
        }
        
    }
    
    package FacadeModel;
    
    public class Stock2 {
        //卖股票
            public void sell(){
                System.out.println("股票2卖出");
            }
            //买股票
            public void buy(){
                System.out.println("股票2买入");
            }
    }
    
    package FacadeModel;
    
    public class Stock3 {
        //卖股票
                public void sell(){
                    System.out.println("股票3卖出");
                }
                //买股票
                public void buy(){
                    System.out.println("股票3买入");
                }
    }
    package FacadeModel;
    
    /**
     * 国债
     * @author 我不是张英俊
     *
     */
    public class NationalDebt1 {
                //卖国债
                public void sell(){
                    System.out.println("国债卖出");
                }
                //买国债
                public void buy(){
                    System.out.println("国债买入");
                }
    }

    2:创建基金类。

    package FacadeModel;
    
    /**
     * 基金类
     * @author 我不是张英俊
     *
     */
    public class Fund {
    
        Stock1 st1;
        Stock2 st2;
        Stock3 st3;
        
        NationalDebt1 nd;
        
        public Fund(){
            st1=new Stock1();
            st2=new Stock2();
            st3=new Stock3();
            nd=new NationalDebt1();
        }
        
        public void buyFund(){
            st1.buy();
            st2.buy();
            st3.buy();
            nd.buy();
        }
        
        public void sellFund(){
            st1.sell();
            st2.sell();
            st3.sell();
            nd.sell();
        }
        
        
        
    }

    3:测试类

    package FacadeModel;
    
    /**
     * 购买股票,但是因为不熟悉股票,所以购买基金, 通过专业人士操纵基金购买股票,
     * 
     * 外观模式
     * @author 我不是张英俊
     *
     */
    public class Test {
    
        public static void main(String[] args) {
            Fund jijin=new Fund();
            //基金购买
            jijin.buyFund();
            //基金销售
            jijin.sellFund();
    
        }
    
    }

    4:控制台。

    股票1买入
    股票2买入
    股票3买入
    国债买入
    股票1卖出
    股票2卖出
    股票3卖出
    国债卖出

    但是外观模式在什么时候使用那?

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

  • 相关阅读:
    Spring Cloud 入门教程6、Hystrix Dashboard监控数据聚合(Turbine)
    Spring Cloud 入门教程5、服务容错监控:Hystrix Dashboard
    Spring Cloud 入门教程4、服务容错保护:断路器(Hystrix)
    Spring Cloud 入门教程3、服务消费者(Feign)
    JS==和===总结
    怀疑与批判
    Java多线程速记手册
    编译原理
    C系、Java、JavaScript、C#、PHP、Swift基本语法对比
    单例模式番外篇
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/7662304.html
Copyright © 2020-2023  润新知