zoukankan      html  css  js  c++  java
  • 设计模式

    // 硬件抽象类
    abstract class HandsetBrand
    {
        // 硬件上安装的软件列表
        protected IList<HandsetSoftware> _softwareList = new List<HandsetSoftware>();
        public void AddSoftware(HandsetSoftware soft)
        {
            _softwareList.Add(soft);
        }
    
        public void RemoveSoftware(HandsetSoftware soft)
        {
            _softwareList.Remove(soft);
        }
    
        public abstract void Run();        
    }
    
    class HansetBrandM : HandsetBrand
    {
        public override void Run()
        {
            foreach (HandsetSoftware s in _softwareList)
            {
                s.Run();
            }
        }
    }
    
    class HansetBrandN : HandsetBrand
    {
        public override void Run()
        {
            foreach (HandsetSoftware s in _softwareList)
            {
                s.Run();
                break;
            }
        }
    }
    
    abstract class HandsetSoftware
    {
        public abstract void Run();
    }
    
    class HansetGame : HandsetSoftware
    {
        public override void Run()
        {
            Console.WriteLine("Run game");
        }
    }
    
    class HansetChat : HandsetSoftware
    {
        public override void Run()
        {
            Console.WriteLine("Run Chat");
        }
    }
    

    将抽象部分与它实现的部分分离。
    上面的例子,手机有各个品牌,手机里面有各个软件,如果让A品牌的A软件继承 A品牌,那么会导致继承的滥用。因为它们是合成关系。
    就像酒店分五星级、四星级,酒店里面有早餐、健身房。如果让五星级早餐继承五星级酒店,会导致每种酒店下的每种服务都需要一个类。

  • 相关阅读:
    Linux系统 关机/重启/用户切换/注销,用户管理(用户创建/修改,用户组增加/删除),Linux中 / 和 ~ 的区别
    jQuery的ajax技术
    jQuery事件
    动态轮播图
    焦点式轮播图
    小米官网案例
    选项卡嵌套
    jQuery筛选方法
    导航条案例
    jQuery位置属性
  • 原文地址:https://www.cnblogs.com/MichaelLoveSna/p/14199121.html
Copyright © 2011-2022 走看看