大话设计模式,让你的代码更完美7---外观模式

来源:互联网 发布:中信淘宝v卡金卡积分 编辑:程序博客网 时间:2024/06/05 02:34

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

这一模式是最最最常用到的和见到的设计模式。

需求:股民投资购买股票、期货、国债等等

菜鸟代码:

 //股票1    class Stock1    {        //卖股票        public void Sell()        {            Console.WriteLine(" 股票1卖出");        }        //买股票        public void Buy()        {            Console.WriteLine(" 股票1买入");        }    }    //股票2    class Stock2    {        //卖股票        public void Sell()        {            Console.WriteLine(" 股票2卖出");        }        //买股票        public void Buy()        {            Console.WriteLine(" 股票2买入");        }    }    //国债1    class NationalDebt1    {        //卖国债        public void Sell()        {            Console.WriteLine(" 国债1卖出");        }        //买国债        public void Buy()        {            Console.WriteLine(" 国债1买入");        }    }
主函数:

        static void Main(string[] args)        {            Stock1 gu1 = new Stock1();            Stock2 gu2 = new Stock2();            Stock3 gu3 = new Stock3();            NationalDebt1 nd1 = new NationalDebt1();            gu1.Buy();            gu2.Buy();            nd1.Buy();            gu1.Sell();            gu2.Sell();            nd1.Sell();            Console.Read();        }    }
老鸟代码:
 class Fund    {        Stock1 gu1;        Stock2 gu2;        Stock3 gu3;        NationalDebt1 nd1;        Realty1 rt1;        public Fund()        {            gu1 = new Stock1();            gu2 = new Stock2();            nd1 = new NationalDebt1();        }        public void BuyFund()        {            gu1.Buy();            gu2.Buy();            nd1.Buy();        }        public void SellFund()        {            gu1.Sell();            gu2.Sell();            nd1.Sell();        }    }
主函数:

        static void Main(string[] args)        {            Fund jijin = new Fund();            jijin.BuyFund();            jijin.SellFund();            Console.Read();        }


对于菜鸟来言,所有的行为都需要自己(主函数)去操作,买股票,卖股票,买期货,买期货等等。。。。

对于老鸟来言,既然都要操作完全可以进行包装一下,将各个投资都封装到Fund中,然后统一进行买卖操作,在这里股票投资可以用到之前的克隆哦,

也可以用到代理proxy(让基金管理人管理),也可以用到工厂模式。

暂且不提上述的操作,相对客户端来言,我不需要知道谁做的,怎么做的,我只需要看到你买卖就OK

所以相对于外观类fund类而言,他需要了解所有子系统(股票、期货)的方法和属性,然后进行组合,以备客户端调用。


结构图对比:



总结:在设计初期,要有意识的将不同的两个层分离(三层架构),在层与层之间建立外观模式,降低之间耦合性。

因为开发阶段子系统(买卖股票/期货)往往不断的进行重构演化而更加复杂,使用外观模式可以减少两者间依赖。

比如:主函数是A系统,股票买卖是C系统,期货买卖是D系统,如果之间互联,A,C,D系统的任意一方变更都会导致另一方代码的大量修改,

使用外观模式Facade则可以使各系统之间清晰交互,如图






0 0
原创粉丝点击