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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式学习--外观模式相关的知识,希望对你有一定的参考价值。

外观模式(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与遗留代码交互所有复杂的工作。如下图:

技术分享

 

以上是关于设计模式学习--外观模式的主要内容,如果未能解决你的问题,请参考以下文章

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

设计模式学习笔记——外观模式

设计模式之外观模式

设计模式学习笔记--外观模式

设计模式:学习笔记(11)——外观模式

Java设计模式学习记录-外观模式