外观模式

简介: 外观模式

今天学习了外观模式,感觉收获颇大,所以赶紧做个总结,为大家分享一下!


当提到“外观”两个字的时候,脑海中想象到的是一个东西的表面,内部构造是看不到的,那么这个外观模式跟现实生活中是差不多的,个人认为的。简单的来说就是客户端访问代码的时候直接访问的是一个中间者,至于中间者的背后是什么样的,不必知道,但是得到的效果是一样的,只是有一个中间者来和客户交流。


好处:增加外观,可以提供一个简单的接口,减少类与类之间的依赖。如下图:


0c4a2116b046226c83a07ffb4f2eb2fe_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTE1NQ==,size_16,color_FFFFFF,t_70.png


左部分是客户直接跟类沟通,右边是客户跟一个中间者沟通,这样从表面上看起来是非常清晰和详细的。


就比如股票和基金一样,把股票归为基金的一种,直接购买基金的层面会多一些。所以基金可以在这里充当一个中间者。


首先得把基金下面的小类列出来

class Stock1
        {
            //卖股票
            public void Sell()
            {
                Console.WriteLine("股票1卖出");
            }
            //买股票
            public void Buy()
            {
                Console.WriteLine("股票1买入");
            }
        }
        class Stock2
        {
            public void Sell()
            {
                Console.WriteLine("股票2卖出");
            }
            public void buy()
            {
                Console.WriteLine("股票2买入");
            }
        }
        class Stock3
        {
            public void Sell()
            {
                Console.WriteLine("股票3卖出");
            }
            public void buy()
            {
                Console.WriteLine("股票2买入");
            }
        }
        //国债1
        class NationalDebt1
        {
            public void Sell()
            {
                Console.WriteLine("国债1卖出");
            }
            public void Buy()
            {
                Console.WriteLine("国债1买入");
            }
        }
        class Realty1
        {
            public void Sell()
            {
                Console.WriteLine("房地产1卖出");
            }
            public void Buy()
            {
                Console.WriteLine("房地产1买入");
            }
        }

然后再有一个中间者“基金类”,然后基金可以买卖,这就增加了买卖两者方法,在基金类种要把所有的股票等类型,放到基金中

class Fund
    {
        Stock1 gu1;
        Stock2 gu2;
        Stock3 gu3;
        NationalDebt1 nd1;
        Realty1 rt1;
        public Fund()
        {
            gu1 = new Stock1();
            gu2 = new Stock2();
            gu3 = new Stock3();
            nd1 = new NationalDebt1();
            rt1 = new Realty1();
        }
        public void ButFund() 
        {
            gu1.Buy();
            gu2.buy();
            gu3.buy();
            nd1.Buy();
            rt1.Buy();
        }
        public void SellFund()
        {
            gu1.Sell();
            gu2.Sell();
            gu3.Sell();
            nd1.Sell();
            rt1.Sell();
        }
    }

在主函数中直接实例化基金即可

 static void Main(string[] args)
        {
            Fund jijin = new Fund();
            //基金购买
            jijin.ButFund();
            //基金赎回
            jijin.SellFund();
            Console.Read();
        }

从主函数看减少而代码的冗余,而且比较清晰,想要达到的目的也不会少


相关文章
|
4月前
|
前端开发
结构型 外观模式
结构型 外观模式
16 0
|
8月前
|
设计模式 API C++
2023-6-27-第九式外观模式
2023-6-27-第九式外观模式
46 0
|
11月前
|
设计模式 Java
Java设计模式-外观模式(Facade)
Java设计模式-外观模式(Facade)
|
11月前
|
应用服务中间件 智能硬件 容器
结构型模式-外观模式
结构型模式-外观模式
59 0
|
设计模式
我学会了,外观模式
外观模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。
101 0
我学会了,外观模式
|
设计模式 Java
浅谈JAVA设计模式之——外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
173 0
浅谈JAVA设计模式之——外观模式(Facade)
|
XML 设计模式 Java
|
设计模式 Java 双11
JAVA设计模式(3)外观模式(门面模式)
2019年阿里云双11活动拼团:https://www.aliyun.com/1111/2019/group-buying-share 针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。
|
设计模式 Java
java设计模式之外观模式(门面模式)
针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。 一、概念介绍  外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。
678 0