zoukankan      html  css  js  c++  java
  • 设计模式学习笔记之 装饰者模式

    代码:

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

    namespace DecoratePattern
    {
    class Program
    {
    static void Main(string[] args)
    {
    Console.Write(
    "顾客:来一盘饺子\r\n");
    Console.Read(); Console.Read();

    Dumpling dumpling
    = new Dumpling();
    Console.Write(
    "服务生:"+dumpling.Describe()+" "+dumpling.Cast().ToString()+"元人民币\r\n");
    Console.Read(); Console.Read();

    Console.Write(
    "顾客:等等,再给我拿点醋\r\n");
    Console.Read(); Console.Read();

    Vinegar vingarDumpling
    = new Vinegar(dumpling);//用“醋”修饰饺子
    Console.Write("服务生:" + vingarDumpling.Describe() + " " + vingarDumpling.Cast().ToString() + "元人民币\r\n");
    Console.Read(); Console.Read();

    Console.Write(
    "顾客:什么,太黑了,醋也要钱,那酱油我也要点\r\n");
    Console.Read(); Console.Read();

    Soy soyVingarDumpling
    = new Soy(vingarDumpling);//用“酱油”修饰那盘加了醋的饺子
    Console.Write("服务生:" + soyVingarDumpling.Describe() + " " + soyVingarDumpling.Cast().ToString() + "元人民币\r\n");
    Console.Read(); Console.Read();

    Console.Write(
    "顾客:啊,酱油不是和醋算在一起的?\r\n");
    Console.Read(); Console.Read();
    Console.Write(
    "----------顾客吃光了饺子----------\r\n");
    Console.Read(); Console.Read();

    Console.Write(
    "顾客:也太少了点,再来一盘馄饨吧,还有加醋和酱油\r\n");
    Console.Read(); Console.Read();

    Soy soyVingarWonton
    =new Soy(new Vinegar(new Wonton()));
    Console.Write(
    "服务生:" + soyVingarWonton.Describe() + " " + soyVingarWonton.Cast().ToString() + "元人民币\r\n");
    Console.Read(); Console.Read();

    Console.Write(
    "顾客:cow,再也不来这里吃饭了\r\n");
    Console.Read(); Console.Read();


    }
    }

    /// <summary>
    /// 食物超类
    /// </summary>
    abstract class Food
    {
    abstract public string Describe();
    abstract public double Cast();

    }


    /// <summary>
    /// 被修饰者一:馄饨
    /// </summary>
    class Wonton : Food
    {
    public override Double Cast()
    {
    return 10;
    }

    public override string Describe()
    {
    return "馄饨";
    }
    }

    /// <summary>
    /// 被修饰者二:饺子
    /// </summary>
    class Dumpling : Food
    {
    public override Double Cast()
    {
    return 12;
    }

    public override string Describe()
    {
    return "饺子";
    }
    }

    class Vinegar : Food
    {
    private Food _Food;

    public Vinegar(Food Food)
    {
    this._Food = Food;
    }
    public override string Describe()
    {
    return "加醋" + this._Food.Describe();
    }

    public override double Cast()
    {
    return 2 + this._Food.Cast();
    }
    }

    class Soy : Food
    {
    private Food _Food;

    public Soy(Food Food)
    {
    this._Food = Food;
    }
    public override string Describe()
    {
    return "加酱油" + this._Food.Describe();
    }

    public override double Cast()
    {
    return 3 + this._Food.Cast();
    }

    }

    }

    运行结果:

  • 相关阅读:
    腾讯推出微信企业服务平台风铃
    WAP网页输入框的默认键盘类型控制
    asp.net+扫描仪+图片上传
    Web截屏插件
    java扫描仪上传文件
    web高拍仪图片上传
    网页中怎么实现客户端通过扫描仪把图像传到服务器上
    如何在Web页面里面使用高拍仪扫描上传图像
    B/S选择文件夹上传
    用java实现文件的断点续传并发下载
  • 原文地址:https://www.cnblogs.com/zzy0471/p/1324762.html
Copyright © 2011-2022 走看看