zoukankan      html  css  js  c++  java
  • 装饰

    1:简介
          装饰(Decorator)模式又名包装(Wrapper)模式[GOF95]。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
    2:类图

  • 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
  • 具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
  • 装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
  • 具体装饰(Concrete Decorator)角色:负责给构件对象"贴上"附加的责任。
  • 3:代码

        //抽象构件(Component)角色
        public abstract class Tank
        
    {
            
    public abstract void Shot();
        }


        
    //具体构件(Concrete Component)角色
        public class T50 : Tank
        
    {
            
    public override void Shot()
            
    {

            }

        }


        
    //装饰(Decorator)角色
        public abstract class Decorator : Tank //Do Like
        {
            
    private Tank tank; //Has-a

            
    public void SetComponent(Tank tanks)
            
    {
                
    this.tank = tanks;
            }


            
    public override void Shot()
            
    {
                
    this.tank.Shot();
            }

        }


        
    //具体装饰(Concrete Decorator)角色
        public class ConcreteDecoratorA : Decorator
        
    {
            
    public override void Shot()
            
    {
                System.Console.WriteLine(
    "增加夜视能力");
                
    base.Shot();
            }

        }


        
    //具体装饰(Concrete Decorator)角色
        public class ConcreteDecoratorB : Decorator
        
    {
            
    public override void Shot()
            
    {
                System.Console.WriteLine(
    "增加卫星定位能力");
                
    base.Shot();
            }

        }


        
    /*
        public abstract class Tank
        {
            public abstract void Shot();
        }

        public class T50 : Tank
        {
            public override void Shot()
            {
                
            }
        }

        public abstract class Decorator : Tank
        {
            private Tank tank;

            public Decorator(Tank _tank)
            {
                this.tank = _tank;
            }

            public override void Shot()
            {
                
            }
        }

        public class DecoratorA : Decorator
        {
            public DecoratorA(Tank tank)
                : base(tank)
            { 

            }

            public override void Shot()
            {
                System.Console.WriteLine("增加夜视能力");
                base.Shot();
            }
        }

        public class DecoratorB : Decorator
        {
            public DecoratorB(Tank tank)
                : base(tank)
            {

            }

            public override void Shot()
            {
                System.Console.WriteLine("增加夜视能力");
                base.Shot();
            }
        }
         
    */

    //调用
                Bll.Decorator.Tank t50 = new Bll.Decorator.T50();
                Bll.Decorator.ConcreteDecoratorA concreteDecoratorA 
    = new Bll.Decorator.ConcreteDecoratorA();
                Bll.Decorator.ConcreteDecoratorB concreteDecoratorB 
    = new Bll.Decorator.ConcreteDecoratorB();
                concreteDecoratorA.SetComponent(t50);
                concreteDecoratorB.SetComponent(concreteDecoratorA);
                concreteDecoratorB.Shot();
查看全文
  • 相关阅读:
    vsftpd不支持目录软链接的解决办法
    SVN添加忽略目录
    Mysql 默认编码问题
    php-fpm 信号
    基于MAVEN使用IDEA创建dubbo入门项目图文教程
    taotao商城遇到的问题
    git push后出错
    Mybatis逆向工程自动生成代码(Ubuntu18.04-idea环境)
    git add.后回退 代码丢失
    对象的共享
  • 原文地址:https://www.cnblogs.com/tommyli/p/1069696.html
  • Copyright © 2011-2022 走看看