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里面的装饰功能

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

  • 相关阅读:
    Python-读取文件内容
    torch_03_二分类
    torch_02_多项式回归
    pytorch_01_基础_一维线性回归
    LC-KSVD 代码解读
    标签一致项(LC-KSVD)-全文解读
    PCA:主成分分析
    牛客刷题-大佬链接
    调试MATLAB代码
    scroll offset & client总结
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2996485.html
Copyright © 2011-2022 走看看