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

    装饰着模式比较简单也比较实用当要扩展的时候只要传入要包装的对象就好了,比起扩展方法需要一个静态类和一个静态方法比较好用点也比较直观明白

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    using System.Reflection;
    namespace ConsoleApplication2
    {
        public interface Tank
        {
            void shot();
            void run();
        
        }
        public class tank2A : Tank
        {

            public void shot()
            {
                Console.WriteLine("tank20 shot");
              
            }

            public void run()
            {
                Console.WriteLine("tank20 run");
            }
        }
        public class tank3A : Tank
        {

            public void shot()
            {
                Console.WriteLine("tank30 shot");
            }

            public void run()
            {
                Console.WriteLine("tank30 run");
            }
        }
        public abstract class Decorata:Tank
        {
            Tank tank;
            public Decorata(Tank tank)
            {  
                this.tank = tank;
            
            }
            public void shot()
            {
                tank.shot();
                Console.WriteLine("shotA");

            }

            public void run()
            {
                tank.run();
                Console.WriteLine("runA");
            }



           
        }
        public  class DecorataA : Decorata
        {
            Tank tank;
           
            public DecorataA(Tank tank):base(tank)
            {

                this.tank = tank;
            }
            public void shot()
            {
                tank.shot();
                Console.WriteLine("shotA");

            }

            public void run()
            {
                tank.run();
                Console.WriteLine("runA");
            }



          
        }

        public class DecorataB : DecorataA
        {
            Tank tank;

            public DecorataB(Tank tank)
                : base(tank)
            {

                this.tank = tank;
            }
            public void shot()
            {
                tank.shot();
                Console.WriteLine("shotB");

            }

            public void run()
            {
                tank.run();
                Console.WriteLine("runB");
            }




        }
      public  class Program
        {
          
            static void Main(string[] args)
            {

                Tank tank = new tank2A();
                DecorataA da = new DecorataA(tank);
                DecorataB db = new DecorataB(da);
                db.shot();
                db.run();
                Console.ReadKey();
            }
        }
    }

  • 相关阅读:
    十个利用矩阵乘法解决的经典题目
    POJ-3070-Fibonacci
    java 正则表达式-忽略大小写与多行匹配
    【MM 非生产性物资采购】SAP实施项目中采购员在非生产性采购申请审批流中的角色安排(转)
    业务调研杂谈(转)
    重置报表输出选择
    【MM 配额管理】Quota Arrangement 配额管理(二)
    【MM 配额管理】Quota Arrangement 配额管理
    SDUST第十一次oj作业液晶显示问题
    如何在js代码中调用java,并将js的变量赋值给java
  • 原文地址:https://www.cnblogs.com/kexb/p/3670928.html
Copyright © 2011-2022 走看看