C#装饰者模式实例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 装饰者
{
    class Program
    {
        static void Main(string[] args)
        {
            ConcreteComponent con = new ConcreteComponent();
            ConcreteDecoratorA a = new ConcreteDecoratorA();
            a.SetComponent(con);
            a.Operation();
            a.AddBehavior();
            Console.WriteLine("============================");
            ConcreteDecoratorB B = new ConcreteDecoratorB();
            B.SetComponent(a);
            a.AddBehavior();
            B.Operation();
            B.AddBehavior();
        }
        public abstract class Component
        {
            public abstract void Operation();
        }
        abstract class Decorator : Component
        {
            private Component component;
            public void SetComponent(Component component)
            {
                this.component = component;
            }
            public override void Operation()
            {
                if (component != null)
                {
                    component.Operation();
                }
            }
        }
        class ConcreteDecoratorA : Decorator
        {
            public override void Operation()
            {
                base.Operation();
            }
            public void AddBehavior()
            {
                Console.WriteLine("装饰A类的操作!");
            }
        }
        class ConcreteDecoratorB : Decorator
        {
            public override void Operation()
            {
                base.Operation();
            }
            public void AddBehavior()
            {
                Console.WriteLine("装饰B类的操作!");
            }
        }
        public class ConcreteComponent : Component
        {
            public override void Operation()
            {
                Console.WriteLine("具体对象的操作!");
            }
        }
    }
}
时间: 2024-11-13 04:04:55

C#装饰者模式实例代码的相关文章

装饰者模式与代码扩展性的探究

代码的增强优化与扩展,是每个程序员绕不开的坎儿,当然也是我们所追求的理念与信仰,而装饰者模式则是一种很优秀的代码优化理念, 在这里跟大家分享一些自己的学习心得: ------------------------------------------------------------------------------------------------------------------------------------- 举个简单的例子, public static void action(

设计模式入门,装饰着模式,c++代码实现

// test03.cpp : Defines the entry point for the console application.////设计模式第3章 装饰者模式#include "stdafx.h"#include <string>#include <iostream>//#include <cstring>using namespace std;class Beverage{public:    string description /*

php设计模式之策略模式实例代码

html <html> <head> <meta charset="UTF-8"> <title>简单计算器</title> </head> <body> <h1>简单计算器</h1> <form action="10.php" method="post"> <input type="text" nam

php设计模式之桥接模式实例代码

<?php header("Content-type:text/html;charset=utf-8"); abstract class msg{ protected $send = null; public function __construct($send){ $this->send = $send; } abstract function msg($content); function send($to, $content){ $content = $this-&g

装饰器模式与代理模式比较

当有这样的业务需求的时候——要为写好的代码在目标代码之前或者之后添加部分操作时,此时最笨的方法就是直接在目标代码的前后加上我们需要的功能代码,但是这样违背了java封装的特性.更好一点的方法就是使用设计模式——代理模式,然而,装饰器模式也有同类的功能,那么着两种设计模式到底有什么区别呢?下面就分别来学习一下这两种设计模式. 装饰器模式类图如下: 该类图包括几个部分:一个接口(装饰器与需要被装饰的实体类都需要实现该接口,公用方法在该接口中定义),一个实现类,一个装饰器的接口,具体实现的装饰器. 在

java设计模式------装饰着模式

java设计模式-------装饰者模式 装饰者模式 Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案.主要有组件(components)和装饰器(Decorator)组成.要求components和Decorator实现相同的接口或者抽象类(具体类的局限性太大). 设计原则.模式特点.适用性 - 1. 多用组合,少用继承. 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为.然而,如果能够利用

五分钟一个设计模式之装饰器模式

五分钟一个设计模式,用最简单的方法来描述设计模式.查看更多设计模式,请点击五分钟一个设计模式系列 http://blog.csdn.net/daguanjia11/article/category/3259443 示例代码 今天实在是想不出什么开场白来引出示例了,也想不出特别有意思的示例了,就用一个很土的例子来描述一下装饰器模式吧. 每个人都要穿衣服,每件衣服都具有某些特定的功能,例如,穿上鞋子的话走路舒服,穿上上衣的话上身不冷,穿上裤子的话腿不冷(你这不废话吗).也就是说,每件衣服都具有特定的

7、装饰者模式

装饰者模式 从我们之前学到的知识中, 已经知道扩展一个类的方法是为他派生新的子类, 也就是通过继承来扩展功能. 然而, 使用继承是静态的, 在编译的时候就已经决定了子类的行为, 我们不便于控制增加行为的方式和时机. 而装饰者模式可以动态地将责任附加到对象上, 若要扩展对象, 装饰者模式提供了比继承更弹性的替代方案. 使用场景:对象由主体+许多可选的部件或者功能构成,使用继承或者接口会产生很多类,且很难扩展.例如,现在需要一个汉堡,主体是鸡腿堡,可以选择添加生菜.酱.辣椒等等许多其他的配料,这种情

23种设计模式之装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern) 允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 通过采用组合.而非继承的手法,Decorator模式实现了在运行时动态地扩展对象功能的能力,而且可以根据需要扩展多个功能.避免了单独使用继承带来的“灵活性差"和"多子类衍生问题". 优点:装饰类和被装饰类可以独立发