外观模式

简介: 外观模式

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


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


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


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();
        }

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


相关文章
|
2月前
|
设计模式 缓存 算法
C#一分钟浅谈:组合模式与外观模式
【10月更文挑战第15天】本文介绍了面向对象设计模式中的组合模式和外观模式。组合模式通过树形结构表示“部分-整体”的层次关系,适用于文件系统、图形界面等场景;外观模式提供统一接口简化复杂系统的使用,适用于视频播放器等多模块系统。文章详细解释了这两种模式的基本概念、应用场景、实现方式及常见问题和解决方法,帮助读者更好地理解和应用。
43 9
|
7月前
|
前端开发
结构型 外观模式
结构型 外观模式
33 0
|
设计模式 API C++
2023-6-27-第九式外观模式
2023-6-27-第九式外观模式
84 0
|
设计模式 Java
Java设计模式-外观模式(Facade)
Java设计模式-外观模式(Facade)
|
应用服务中间件 智能硬件 容器
结构型模式-外观模式
结构型模式-外观模式
87 0
|
设计模式
我学会了,外观模式
外观模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。
130 0
我学会了,外观模式
门面模式 与 装饰器模式(2)
门面模式 与 装饰器模式(2)
121 0
门面模式 与 装饰器模式(2)
|
前端开发 uml
门面模式 与 装饰器模式(1)
门面模式 与 装饰器模式(1)
132 0
门面模式 与 装饰器模式(1)
|
设计模式 Java
浅谈JAVA设计模式之——外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
230 0
浅谈JAVA设计模式之——外观模式(Facade)