首页 > 编程语言 >C# 装饰模式

C# 装饰模式

时间:2022-08-30 22:25:03浏览次数:63  
标签:Console C# void 模式 public Phone Print 手机 装饰

// See https://aka.ms/new-console-template for more information
/*
 * 个人理解
 你要往原有的东西上加东西
 Phone=装饰手机原材料
 Decorator=装饰手机中间人
 XiaoMi=具体装饰的手机
 Sticker=装饰手机中间人拿装饰手机原材料来装饰XiaoMi。给它贴膜
 */

//拿出小米手机
Phone phone1 = new XiaoMi();
Decorator xiaoMiSticker = new Sticker(phone1);
xiaoMiSticker.Print();
Decorator xiaoMiAccessories = new Accessories(phone1);
xiaoMiAccessories.Print();
/// <summary>
/// 手机抽象类,即装饰者模式中的抽象组件类
/// </summary>
public abstract class Phone
{
    public abstract void Print();
}
/// <summary>
/// 装饰类
/// </summary>
public abstract class Decorator : Phone
{
    private Phone Phone;
    protected Decorator(Phone phone)
    {
        Phone = phone;
    }
    public override void Print()
    {
        if (Phone != null)
            Console.WriteLine("我是Decorator重写实现");
        Phone?.Print();
    }
}
/// <summary>
/// 小米手机,即装饰着模式中的具体组件类
/// </summary>
public class XiaoMi : Phone
{
    /// <summary>
    /// 重写基类方法
    /// </summary>
    public override void Print()
    {
        Console.WriteLine("开始执行具体对象-小米手机");
    }
}
/// <summary>
/// 苹果手机,即装饰着模式中的具体组件类
/// </summary>
public class Iphone : Phone
{
    public override void Print()
    {
        Console.WriteLine("开始执行具体对象-苹果手机");
    }
}
public class Redmi : Phone
{
    public override void Print()
    {
        Console.WriteLine("开始执行具体对象-红米手机");
    }
}

/// <summary>
/// 手机贴膜
/// </summary>
public class Sticker : Decorator
{
    public Sticker(Phone phone) : base(phone)
    {
    }
    public override void Print()
    {
        //  base.Print();
        Console.WriteLine("开始贴膜");
        AddSticker();
    }
    /// <summary>
    /// 新的行为方法
    /// </summary>
    public void AddSticker()
    {
        Console.WriteLine("现在小米手机有贴膜了");
    }
}
/// <summary>
/// 手机挂件
/// </summary>
public class Accessories : Decorator
{
    public Accessories(Phone phone) : base(phone)
    {
    }
    public override void Print()
    {
        // base.Print();
        Console.WriteLine("开始挂挂件");
        AddSticker();
    }
    /// <summary>
    /// 新的行为方法
    /// </summary>
    public void AddSticker()
    {
        Console.WriteLine("现在小米手机有挂件了");
    }
}

 

标签:Console,C#,void,模式,public,Phone,Print,手机,装饰
From: https://www.cnblogs.com/liujian1368928/p/16641065.html

相关文章

  • 微服务配置中心Nacos
    1.什么是配置中心?例如传统的framwork中web.congfig、winform中的app.config、NetCore下的appsettings.json这些都是应用程序的配置文件,配置的作用其实简单来说,就是用来......
  • SpringBoot配置文件application
    原文链接Map配置YML配置文件:sys-num:mymap:"{'a':'aaa','b':'bbb'}"方法内:publicclasslearnMap{@Value("#{${sys-num.mymap}}")privateMap<Strin......
  • 工具函数(JavaScript)——如何判断设备是不是移动端
    浏览器有一个Navigator接口,表示用户代理的状态和标识。Navigator.userAgent可以知道客户端的设备类型。请求的请求标头有一个user-agent字段,内容中包含了设备型号的信......
  • civil3d安装教程2022序列号和密钥
     Civil3D2021WIN1064位安装步骤:1.先使用“百度网盘客户端”下载C3D21_CN_x64软件安装包到电脑磁盘里,并右击进行解压,安装前先断网,然后找到Autodesk_Civil_3D_2021_Chin......
  • C嵌入式编程设计模式-C语言类实现方式
    类的封装方式以文件作为封装边界,将外部调用的函数声明,全局变量变量放入头文件中,将具体实现放入.c文件中。简单栈的实现代码:/************************************......
  • (开集检测系列)MDETR - Modulated Detection for End-to-End Multi-Modal Understandin
    caption数据+DETR做开集检测1、动机1、只在固定object和属性上训练,解决不了长尾的问题/开集2、方法2.1优势1、MDETR仅依赖于文本和对齐的框作为图像中概念形式进......
  • cpp类对象作函数参数
    cpp类对象作函数参数参考:c++PrimePlus(第六版)第12章传址or传值函数传参有几种:指针、引用、值;前两个都是传入地址,最后一个传入对象的值由于指针操作数据的灵活性高,且......
  • Codeforces Round #774 E
    这道题感觉没有E平时的难度首先我们感性理解一下相交的数只有可能是一个数的幂次才能相交比如248;3927;然后我们把他们行单独提出来再观察一下幂次发现其实都是......
  • vector花括号初始化构造
                ......
  • SpringCloudAlibaba
    SpringCloudAlibaba基础复习微服务模块建module改POM写YML主启动业务类使用restTemplet发送http请求packagecom.yhd.config;importorg.springframework.con......