外观模式的C#实现

借鉴于各路大神,也就不做链接了

class FacadePattern
    {
        /// <summary>
        /// 子系统1
        /// </summary>
        public class System1
        {
            public void Method()
            {
                Console.WriteLine("System1.Method");
            }
        }
        /// <summary>
        /// 子系统2
        /// </summary>
        public class System2
        {
            public void Method()
            {
                Console.WriteLine("System2.Method");
            }
        }
        /// <summary>
        /// 子系统3
        /// </summary>
        public class System3
        {
            public void Method()
            {
                Console.WriteLine("System3.Method");
            }
        }
        /// <summary>
        /// 外观类
        /// </summary>
        public class Facade
        {
            private System1 system1;
            private System2 system2;
            private System3 system3;
            public Facade()
            {
                system1 = new System1();
                system2 = new System2();
                system3 = new System3();
            }
            public void Method()//外观类中存在多种通过子系统完成的操作,我们不需要知道它怎么完成的,只管调用就好
            {
                system1.Method();
                system2.Method();
                system3.Method();
            }
            public void Method1()
            {
                system1.Method();
                system3.Method();
            }

        }
        //调用
        //FacadePattern.Facade facade = new FacadePattern.Facade();
        //facade.Method();

        //然而问题来了,如果我觉得 子系统2 在某种情况下不好用,我又不能更换
        //那我就再写一个 子系统4 代替这种情况下的 子系统2 ,然后在 外观类 中增加一个方法
        //好像又篡改了别人的代码

        //可以通过抽象外观类解决这个问题
        //当需要大量重复使用某种操作的时候新建一个外观类继承于抽象外观类,重新“组装”一个方法供使用
        //新增子系统可以不更改原代码
        public abstract class AbstractFacade
        {
            public abstract void Method();
        }
        /// <summary>
        /// 新建外观类 继承于抽象外观类,用 子系统4 代替 子系统2
        /// </summary>
        public class Facade1 : AbstractFacade
        {
            private System1 system1;
            private System4 system4;
            private System3 system3;
            public Facade1()
            {
                system1 = new System1();
                system4 = new System4();
                system3 = new System3();
            }
            public override void Method()
            {
                system1.Method();
                system4.Method();
                system3.Method();
            }
        }
        /// <summary>
        /// 子系统4
        /// </summary>
        public class System4
        {
            public void Method()
            {
                Console.WriteLine("System4.Method");
            }
        }
        //调用
        //FacadePattern.Facade1 facade = new FacadePattern.Facade1();
        //facade.Method();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值