zoukankan      html  css  js  c++  java
  • 桥接模式

    桥接模式应用:当应该m和n变化就需要建立m*n个类。

    利用桥接我们封装变化,就只需要建立M+N个类

    主方法

    namespace 桥接模式
    {
        /// <summary>
        /// 桥接模式:
        /// 当我们需要小米ios、小米安卓、苹果ios、苹果安卓手机的时候,对应要件4个类。
        /// 这个时候我们分析手机和操作系统是变化的,需要建m*n个类(m:手机品牌个数 n:系统个数)
        /// 
        /// 这个时候我们可以封装变化
        /// 在手机中定义一个系统字段,外部来赋值,这样就只用建m+n个类
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                //苹果的ios系统手机
                BasePhone iphone = new Iphone();
                iphone.system = new IOS().GetSystem();
                iphone.Call();
                iphone.Message();
    
    
                //小米的ios系统手机
                BasePhone xiaoMi = new XiaoMi();
                xiaoMi.system = new IOS().GetSystem();
                xiaoMi.Call();
                xiaoMi.Message();
    
                //小米的安卓系统手机
                BasePhone xiaoMi = new XiaoMi();
                xiaoMi.system = new Android().GetSystem();
                xiaoMi.Call();
                xiaoMi.Message();
                Console.ReadKey();
            }
        }
    }

    新建手机类

    namespace 桥接模式
    {
        public abstract class BasePhone
        {
            public string system = null;
            public abstract void Call();
            public abstract void Message();
        }
    }
    
        public class Iphone:BasePhone
        {
            public override void Call()
            {
                Console.WriteLine("我这个是{0}手机,用的是{1}操作系统来{2}", this.GetType().Name, base.system, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name);
            }
    
            public override void Message()
            {
                Console.WriteLine("我这个是{0}手机,用的是{1}操作系统来{2}", this.GetType().Name, base.system, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name);
            }
        }
    
        public class XiaoMi:BasePhone
        {
            public override void Call()
            {
                Console.WriteLine("我这个是{0}手机,用的是{1}操作系统来{2}", this.GetType().Name, base.system, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name);
            }
    
            public override void Message()
            {
                Console.WriteLine("我这个是{0}手机,用的是{1}操作系统来{2}", this.GetType().Name, base.system, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name);
            }
        }

    新建系统类

    namespace 桥接模式
    {
        public interface ISystem
        {
            string GetSystem();
        }
    }
    
        public class IOS:ISystem
        {
            public string GetSystem()
            {
                return this.GetType().Name;
            }
        }
    
        public class Android:ISystem
        {
            public string GetSystem()
            {
                return this.GetType().Name;
            }
        }
  • 相关阅读:
    Navicat 远程连接ubuntu出现的问题
    替换 ubuntu 自带的python版本
    xpath疑惑
    xpath中返回值问题
    AttributeError: 'unicode' object has no attribute 'xpath'
    linux下mysql忘记密码解决方案
    IntelliJ idea常用快捷键
    最近的说明(本篇不谈具体技术,看技术的可以忽略)
    常用的排序算法介绍和在JAVA的实现(二)
    mysql数据库查询过程探究和优化建议
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/7074846.html
Copyright © 2011-2022 走看看