zoukankan      html  css  js  c++  java
  • 解决多集成,多子类,扩展等 装饰模式

        public abstract class Tank
        {
            public abstract void Shot();
            public abstract void Run();
        }

    解决主题类再多种方向上的扩展功能

    public abstract class Decorator:Tank
        {
            private Tank tank;
    
            public Decorator(Tank tank)
            {
                this.tank = tank;
            }
    
            public override void Shot()
            {
                Console.WriteLine( "Tank.Shot" );
                tank.Shot();
            }
    
            public override void Run()
            {
                Console.WriteLine( "Tank.Run" );
                tank.Run();
            }
        }
    public class DecoratorA:Decorator
        {
            public DecoratorA( Tank tank )
                : base( tank )
            {
            }
    
            public override void Shot()
            {
                //Do some extension 红外线
                Console.WriteLine( "DecoratorA.Shot" );
                base.Shot();
            }
    
            public override void Run()
            {
                //Do Some extension
                Console.WriteLine( "DecoratorA.Run" );
                base.Run();
            }
        }
    
        public class DecoratorB : Decorator
        {
            public DecoratorB( Tank tank )
                : base( tank )
            {
            }
    
            public override void Shot()
            {
                //Do some extension 夜视功能
                Console.WriteLine( "DecoratorB.Shot" );
                base.Shot();
            }
    
            public override void Run()
            {
                //Do Some extension 夜视功能
                Console.WriteLine( "DecoratorB.Run" );
                base.Run();
            }
        }

    他并不是is a关系,只是把当成接口,主题是has a关系

    看调用

    class Program
        {
            static void Main( string[] args )
            {
                Tank tank = new T50();
                DecoratorA da = new DecoratorA( tank );
                DecoratorB db = new DecoratorB( da );
    
                db.Shot();
            }
        }
      public class T50:Tank
        {
            public override void Shot()
            {
                Console.WriteLine( "T50.Shot" );
            }
    
            public override void Run()
            {
                Console.WriteLine( "T50.Run" );
            }
        }

    在.net里面的装饰功能

    架构设计模式。拜读下有空

  • 相关阅读:
    分治法(待整理)
    NP完全问题
    合并排序
    插入排序
    算法基础知识(算法导论)
    分支定界法
    RUCM简介
    大一编程基础培训]==06课==Python的字符串和编码
    python加密包利用pycrypto包进行AES、DES、MD5等加密
    pyecharts模块
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2996485.html
Copyright © 2011-2022 走看看