设计模式 --外观模式

前言

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

样例说明

为了说明外观模式,我们以一个小例子来说明。

现在很多人都在炒股,这些人根据自己的判断买股票、卖股票。个体户的风险比较大,所以会有些基金会将这些个体户的投资集中起来,集中的购买股票和售卖股票,由于基金会买的种类和数量足够多,这样血亏的风险就会小很多。当然在这里,外观模式的好处并不在此。

有两种模式,-股票模式和-基金会-股票的模式

-股票模式

在这种模式下,人直接操作各种股票的买和卖
在这里插入图片描述
这里我们以三个股票类为例。

先创建三个股票类,代码分别1,2,3

shares中文为股票的意思,这里我们就以shares来作为接口名

public interface shares {
    void sell();
    void buy();
}

股票有卖和买两种行为,所以接口中有卖和买两种方法

股票类1

public class shares1 implements shares{
    @Override
    public void sell() {
        System.out.println("股票代码为1的股票被卖掉");
    }

    @Override
    public void buy() {
        System.out.println("买进股票代码为1的股票");
    }
}

股票类2

public class shares2 implements shares{
    @Override
    public void sell() {
        System.out.println("股票代码为2的股票被卖掉");
    }

    @Override
    public void buy() {
        System.out.println("买进股票代码为2的股票");
    }
}

股票类3

扫描二维码关注公众号,回复: 8941481 查看本文章
public class shares3 implements shares{
    @Override
    public void sell() {
        System.out.println("股票代码为3的股票被卖掉");
    }

    @Override
    public void buy() {
        System.out.println("买进股票代码为3的股票");
    }
}

人操作股票

public class person {
    public static void main(String[] args) {
        shares1 s1 = new shares1();
        shares2 s2 = new shares2();
        shares3 s3 = new shares3();

        s1.buy();
        s2.buy();
        s3.buy();

        s1.sell();
        s2.sell();
        s3.sell();
    }
}
//运行结果
//买进股票代码为1的股票
//买进股票代码为2的股票
//买进股票代码为3的股票
//股票代码为1的股票被卖掉
//股票代码为2的股票被卖掉
//股票代码为3的股票被卖掉

这样做的结果是,人需要知道与三种股票有关的所有方法和属性。

-基金会-股票模式

在这种模式下,客户并不直接与股票打交道。
在这里插入图片描述
新增基金会类

public class foundation {
    shares1 s1 = null;
    shares2 s2 = null;
    shares3 s3 = null;

    public foundation() {
         s1 = new shares1();
         s2 = new shares2();
         s3 = new shares3();
    }
    public void buy()
    {
        s1.buy();
        s2.buy();
        s3.buy();

    }
    public void sell()
    {
        s1.sell();
        s2.sell();
        s3.sell();
    }


}

那么在客户端中,人只需要new基金会类就可以

public class person {
    public static void main(String[] args) {
       
        foundation fd = new foundation();
        fd.buy();
        fd.sell();
    }
}
//运行结果
//买进股票代码为1的股票
//买进股票代码为2的股票
//买进股票代码为3的股票
//股票代码为1的股票被卖掉
//股票代码为2的股票被卖掉
//股票代码为3的股票被卖掉

总结

在这个例子中,人如果要买哪一种的股票,就进行操作。如果人三种股票都想买,那就需要买三次。而在加上基金会类之后,人如果想买股票,只需要调用基金会类。

在这里,基金会类就是外观类,它需要知道所有子系统的属性和方法。

而有了基金会类的存在,人在客户端无需知道任何子系统的属性和方法。

参考

《大话设计模式》

发布了211 篇原创文章 · 获赞 101 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43889841/article/details/104109745