诗集鉴赏别有韵味——单例模式与工厂模式的浪漫邂逅

原文节选,出自两汉乐府诗集的《陌上桑》

日出东南隅,照我秦氏楼。秦氏有好女,自名为罗敷。罗敷喜蚕桑,采桑城南隅。青丝为笼系,桂枝为笼钩。头上倭堕髻,耳中明月珠。缃绮为下裙,紫绮为上襦。行者见罗敷,下担捋髭须。少年见罗敷,脱帽著帩头。耕者忘其犁,锄者忘其锄。来归相怨怒,但坐观罗敷。(喜蚕桑 译作:善蚕桑;相怨怒 译作:相怒怨)
使君从南来,五马立踟蹰。使君遣吏往,问是谁家姝?“秦氏有好女,自名为罗敷。”“罗敷年几何?”“二十尚不足,十五颇有余”。使君谢罗敷:“宁可共载不?”罗敷前致辞:“使君一何愚!使君自有妇,罗敷自有夫!”
“东方千余骑,夫婿居上头。何用识夫婿?白马从骊驹,青丝系马尾,黄金络马头;腰中鹿卢剑,可值千万余。十五府小吏,二十朝大夫,三十侍中郎,四十专城居。为人洁白晰,鬑鬑颇有须。盈盈公府步,冉冉府中趋。坐中数千人,皆言夫婿殊。”(白晰 译作:白皙)

罗敷

通过上面诗集分析,展现了古人对美女的欣赏标准。

今天我们使用 C# 程序重温鉴赏一次,分析主角 罗敷 的描写:

  • 外貌描写:
头发:“头上倭堕髻”,形容罗敷的发型优美,倭堕髻是一种流行的发髻样式。
耳朵:“耳中明月珠”,佩戴珍贵的明珠,显示其高贵和美丽。
服饰:“缃绮为下裙,紫绮为上襦”,穿着华丽的丝绸衣服,颜色搭配得体,显示出她的高雅和精致。
  • 气质描写:
勤劳:“罗敷善蚕桑,采桑城南隅”,罗敷不仅美丽,还勤劳能干,善于蚕桑。
端庄:尽管她美丽动人,但行为举止端庄大方,没有轻浮之态。
  • 社会影响:
行者见罗敷,下担捋髭须:路人见到罗敷,放下担子,捋着胡须欣赏,表现出她的魅力之大。
少年见罗敷,脱帽著帩头:年轻男子见到罗敷,脱下帽子,整理衣冠,表现出对她的倾慕。
耕者忘其犁,锄者忘其锄:农夫们见到罗敷,忘记了手中的农活,表现出她的美貌令人陶醉。

有意思的是 “社会影响”,通过分析我们采用 C# 语言的 工厂模式 结合 单例模式 来分别 “鉴赏” 诗歌之美:

说明:下面的分析纯属虚构,配合剧本(C#)设计而已,英雄所见略同…略同… 😃

此处主要是为了演示 工厂方法模式FactoryMethod,即一般工厂模式)的应用案例。

FactoryMethod

程序实现的总体概述:

- Constructor - SingletonConstructorByLazy,泛型单利构造器
- Factory- ICreator ,工厂定义- ConcreteCreator ,基于 ICreator 规范的具体工厂
- Protagonist- ILuoFu,规范定义- LuoFu,主角罗敷实现 ILuoFu- Adorer,配角实现 ILuoFu ,代表官吏史君和夫婿
- PasserBys- IPasserBy,观众的定义- 基于 IPasserBy 标准的具体实现,XingZhe(行者),ShaoNian(少年),GenZhe(耕者),ChuZhe(锄者)

1、首先我们把这些人物类型抽象定义

  • 围绕主角 罗敷 相关人物的定义
internal interface ILuoFu
{/// <summary>/// 个人简介/// </summary>/// <param name="str"></param>void Profile(string str);/// <summary>/// 会话/// </summary>/// <param name="str"></param>void Say(string str);
}
  • 主角 罗敷 的具体实现
internal sealed class LuoFu : SingletonConstructorByLazy<LuoFu>, ILuoFu
{public bool IsCaiSang { get; private set; } public void SetIsCaiSang(bool isCaiSang){IsCaiSang = isCaiSang;}#region ILuoFupublic void Profile(string str) => Console.WriteLine(str);public void Say(string str) => Console.WriteLine(str);#endregion
}
  • 配角具体实现
using ConsoleApp2.Constructor;namespace ConsoleApp2.Protagonist;internal sealed class Adorer : SingletonConstructorByLazy<Adorer>, ILuoFu
{#region ILuoFupublic void Profile(string str) => Console.WriteLine(str);public void Say(string str) => Console.WriteLine(str);#endregion
}

2、创建泛型单例构造器

namespace ConsoleApp2.Constructor;internal abstract class SingletonConstructorByLazy<TSingle> where TSingle : class, new()
{/// <summary>/// 加了Lazy之后,只有当使用到的时候才加载/// </summary>private static Lazy<TSingle> Single => new(() => new TSingle());public static TSingle SingleInstance => Single.Value;
}

3、 观众定义和实现

# 3.1 观众定义
using ConsoleApp2.Protagonist;namespace ConsoleApp2.PasserBys;internal interface IPasserBy
{/// <summary>/// 人员类型/// </summary>public string PasserType { get; }/// <summary>/// 看见罗敷的行为表现/// </summary>/// <param name="luoFu"></param>public void Comport(LuoFu luoFu);
}# 3.1 观众实现,均继承泛型单例构造器并实现 IPasserBy
# 包括:XingZhe(行者),ShaoNian(少年),GenZhe(耕者),ChuZhe(锄者)internal sealed class XingZhe : SingletonConstructorByLazy<XingZhe>, IPasserBy
{public string PasserType => "行者";public void Comport(LuoFu luoFu){if (luoFu.IsCaiSang)Console.WriteLine("下担捋髭须。");}
}
---
internal sealed class ShaoNian : SingletonConstructorByLazy<ShaoNian>, IPasserBy
{public string PasserType => "少年";public void Comport(LuoFu luoFu){if (luoFu.IsCaiSang)Console.WriteLine("脱帽著帩头。");}
}
---
internal sealed class GenZhe : SingletonConstructorByLazy<GenZhe>, IPasserBy
{public string PasserType => "耕者";public void Comport(LuoFu luoFu){if (luoFu.IsCaiSang)Console.WriteLine("忘其犁");}
}
---
internal sealed class ChuZhe : SingletonConstructorByLazy<ChuZhe>, IPasserBy
{public string PasserType => "锄者";public void Comport(LuoFu luoFu){if (luoFu.IsCaiSang)Console.WriteLine("忘其锄");}
}

4、创建一个工厂(Factory)

# 工厂规范定义
using ConsoleApp2.PasserBys;namespace ConsoleApp2.Factory;internal interface ICreator
{public IPasserBy CreatePasserBy<TClass>() where TClass : IPasserBy;
}# 工厂规范实现
internal sealed class ConcreteCreator : SingletonConstructorByLazy<ConcreteCreator>, ICreator
{public IPasserBy CreatePasserBy<TClass>() where TClass : IPasserBy{//IPasserBy passerBy = default!;var tName = typeof(TClass).Name;IPasserBy passerBy = tName switch{nameof(XingZhe) => XingZhe.SingleInstance,nameof(ShaoNian) => ShaoNian.SingleInstance,nameof(GenZhe) => GenZhe.SingleInstance,nameof(ChuZhe) => ChuZhe.SingleInstance,_ => throw new NotImplementedException($"{tName} 类型暂未实现!")};return passerBy;}
}

5、应用单例模式和工厂模式,解析诗歌集

Program.cs 中,我们这样应用。

using ConsoleApp2.Factory;
using ConsoleApp2.PasserBys;
using ConsoleApp2.Protagonist;namespace ConsoleApp2;internal class Program
{static void Main(string[] args){Console.WriteLine("======欢迎来到 C# 诗歌集赏析大会======");Console.WriteLine("1.主角入场:");var luoFu = LuoFu.SingleInstance;// 1. 初始化罗敷采桑于luoFu.SetIsCaiSang(true);// 2. 罗敷简介string lufuInfo = "日出东南隅,照我秦氏楼。秦氏有好女,自名为罗敷。罗敷喜蚕桑,采桑城南隅。青丝为笼系,桂枝为笼钩。头上倭堕髻,耳中明月珠。缃绮为下裙,紫绮为上襦。";luoFu.Profile(lufuInfo);Console.WriteLine("2.观众入场:");// 单例方式//IPasserBy xinzhe = XingZhe.SingleInstance;//xinzhe.Comport(luoFu);// 单例方式 & 工厂方式var concreteCreator = ConcreteCreator.SingleInstance;PasserFactory(concreteCreator, luoFu, XingZhe.SingleInstance);PasserFactory(concreteCreator, luoFu, ShaoNian.SingleInstance);PasserFactory(concreteCreator, luoFu, GenZhe.SingleInstance);PasserFactory(concreteCreator, luoFu, ChuZhe.SingleInstance);Console.WriteLine("来归相怨怒,但坐观罗敷。(喜蚕桑 一作:善蚕桑;相怨怒 一作:相怒怨)");Console.WriteLine("3.官吏入场:");// 普通方式var adorer = Adorer.SingleInstance;string shijunInfo = "使君从南来,五马立踟蹰。";adorer.Profile(shijunInfo);Console.WriteLine("使君遣吏往,问是谁家姝?");luoFu.Say("罗敷说:“秦氏有好女,自名为罗敷。”");Console.WriteLine("小吏说:“罗敷年几何?”");luoFu.Say("罗敷说:“二十尚不足,十五颇有余”");adorer.Say("使君谢罗敷:“宁可共载不?”");luoFu.Say("罗敷前致辞:“使君一何愚!使君自有妇,罗敷自有夫!”");Console.WriteLine("4.夫婿入场:");string fuxuInfo = "“东方千余骑,夫婿居上头。何用识夫婿?白马从骊驹,青丝系马尾,黄金络马头;腰中鹿卢剑,可值千万余。十五府小吏,二十朝大夫,三十侍中郎,四十专城居。为人洁白晰,鬑鬑颇有须。盈盈公府步,冉冉府中趋。坐中数千人,皆言夫婿殊。”(白晰 一作:白皙)";adorer.Profile(fuxuInfo);adorer.Say("夫婿说:“你个龟儿子,光天化日竟敢...”");}static void PasserFactory<TClass>(ConcreteCreator concreteCreator, LuoFu luoFu, TClass t) where TClass : IPasserBy{IPasserBy passerBy = concreteCreator.CreatePasserBy<TClass>();Console.Write($"===>{passerBy.PasserType}见罗敷,");passerBy.Comport(luoFu);}
}

运行程序,输出如下信息:

1.主角入场:
日出东南隅,照我秦氏楼。秦氏有好女,自名为罗敷。罗敷喜蚕桑,采桑城南隅。青丝为笼系,桂枝为笼钩。 头上倭堕髻,耳中明月珠。缃绮为下裙,紫绮为上襦。
2.观众入场:
===>行者见罗敷,下担捋髭须。
===>少年见罗敷,脱帽著帩头。
===>耕者见罗敷,忘其犁
===>锄者见罗敷,忘其锄
来归相怨怒,但坐观罗敷。(喜蚕桑 一作:善蚕桑;相怨怒 一作:相怒怨)
3.官吏入场:
使君从南来,五马立踟蹰。
使君遣吏往,问是谁家姝?
罗敷说:“秦氏有好女,自名为罗敷。”
小吏说:“罗敷年几何?”
罗敷说:“二十尚不足,十五颇有余”
使君谢罗敷:“宁可共载不?”
罗敷前致辞:“使君一何愚!使君自有妇,罗敷自有夫!”
4.夫婿入场:
“东方千余骑,夫婿居上头。何用识夫婿?白马从骊驹,青丝系马尾,黄金络马头;腰中鹿卢剑,可值千万余 。十五府小吏,二十朝大夫,三十侍中郎,四十专城居。为人洁白晰,鬑鬑颇有须。盈盈公府步,冉冉府中趋 。坐中数千人,皆言夫婿殊。”(白晰 一作:白皙)
夫婿说:“你个龟儿子,光天化日竟敢...”

再次说明,上面分析纯属个人观点,主要是带入 C# 语言领悟 OOP 的世界,但愿归来还是那个少年…

题《罗敷春晖》—— 汉代乐府《陌上桑》诗意城南采桑春日暖,婉转歌声动四围。
头上倭堕髻如云,耳垂明珠光熠熠。
缃绮紫襦身段好,步履轻盈似仙妃。
少年心慕罗敷美,青丝明月映春晖。行者驻足频回顾,少年含笑整衣冠。
耕者忘犁锄者立,皆为罗敷动心弦。
世间佳丽何其多,独爱罗敷情未央。
春风十里不如你,芳华绝代永难忘。

总结

《陌上桑》 通过对 罗敷 的外貌、气质和社会影响的描写,展现了汉代人们对美女的审美标准。不仅注重外貌的美丽,还强调内在的美德和气质,以及对周围人的吸引力。这种综合的审美观念在当时的社会中具有重要的地位。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484060.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重学SpringBoot3-RestTemplate配置与使用详解

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-RestTemplate配置与使用详解 1. 简介2. 环境要求3. 基础配置3.1 添加依赖3.2 RestTemplate配置类 4. 高级配置4.1 自定义连接池配置4.2 错误处理配置 5.…

基于YOLO模型的目标检测与识别实现在ESP32-S3 EYE上全流程部署

前言 文章首发于 基于YOLO模型的目标检测与识别实现在ESP32-S3 EYE上全流程部署 文章目录 前言项目环境安装ESP-IDF安装开发环境运行环境 训练数据集准备添加自定义数据集 下载预训练模型训练 YOLO 模型模型量化和格式转换模型结果评估训练损失评估指标模型推理 模型部署部署环…

Vue中使用ECharts图表中的阈值标记(附源码)

在数据处理和可视化领域&#xff0c;我们经常需要对一系列数据点进行分析。本文将介绍如何在给定的数据点中找到对应于特定Y值的X值&#xff0c;并设置标线起始点标记在ECharts图表中&#xff0c;效果图如下&#xff1a; 实现步骤 1、数据准备 let seriesData [// 提供日期…

如何将 Docker 镜像打包为 ZIP 文件便于分享和转发

在开发和部署中&#xff0c;我们常常需要将 Docker 镜像转发给其他团队成员或部署到不同的环境。如果无法直接访问镜像仓库&#xff08;如 Docker Hub 或私有镜像仓库&#xff09;&#xff0c;可以选择将镜像保存为文件&#xff0c;并通过 ZIP 格式打包后进行分享。 本文将介绍…

岩体力学的材质-力学等属性的自动划分.

#背景: 在力学求解过程中,我们往往会对目标物体进行网格划分, 那么如何做到自动完成这个过程呢? 这里使用岩体力学中的地下岩层进行举例,这里只是简单的导入了4种界面, 复杂的可以一次性导入几十种界面,都可以计算(你能分多细,这个计算方式就可以帮你分层多细) 这里我只是导…

C++打造局域网聊天室第一课:编程环境及准备知识

文章目录 前言一、使用环境二、基础知识1.MFC&#xff08;Microsoft Foundation Class&#xff09;2.API&#xff08;Application Programming Interface&#xff09;3.Unicode编码4.简单的比较5.WinSock6.多线程知识 总结 前言 C打造局域网聊天室第一课&#xff1a;编程环境及…

项目-02-数学学院后台项目开发过程中的问题总结

目录 一、后台&#xff08;pc端&#xff0c;vue2&#xff09;1. dialog对话框被黑色蒙层盖住2. 将前端表格导出为word文档3. 在线查看、下载 .docx、.doc、.pdf文档 一、后台&#xff08;pc端&#xff0c;vue2&#xff09; 1. dialog对话框被黑色蒙层盖住 问题&#xff1a; d…

分类预测 | Matlab实现SO-LSSVM蛇群算法优化最小二乘支持向量机多特征分类预测

分类预测 | Matlab实现SO-LSSVM蛇群算法优化最小二乘支持向量机多特征分类预测 目录 分类预测 | Matlab实现SO-LSSVM蛇群算法优化最小二乘支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现Matlab实现SO-LSSVM蛇群算法优化最小二乘支…

两个畸变矩阵相乘后还是一个2*2的矩阵,有四个畸变元素。1、畸变矩阵吸收了法拉第矩阵。2、畸变矩阵也给法拉第旋转角带来模糊(求解有多种可能)

角度一&#xff1b;恢复畸变的时候也把法拉第旋转恢复了 角度二&#xff1a;求解法拉第旋转角的时候 前面乘的复系数的不同也会带来法拉第旋转角和畸变的不同解 注意&#xff1a;无论多少个畸变矩阵相乘&#xff0c;结果都是2*2的矩阵&#xff0c;也就是畸变参数可以减少…

C# WinForm —— 39 40 41 42 DataGridView 介绍与使用

1. 简介 以网格的形式来显示表格数据&#xff0c;一般与数据库交互&#xff0c;将数据库中某一个表格的数据绑定到 UI控件上 并显示出来 网格中的行和列由用户自定义 三个重要对象&#xff1a;行、列、单元格 2. 属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候…

前端常用缓存技术深度剖析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

gradle下载慢解决方案2024 /12 /1android studio (Windows环境)

gradle下载慢解决方案2024 /12 /1 默认环境配置好了,环境配置和程序安装请出门右转 打开软件,点击右上角设置,找到如下设置页 选择本地安装并制定好你已经安装好的 gradle 应用保存即可 全局插件环境配置(新版本可以直接在设置中添加了) 找对应位置添加国内源并把前面的内置源…

后端返回前端的数据量过大解决方案

后端返回前端的数据量过大解决方案 性能面板(Performance) chrome调试指南 原因 遇到一个页面有好几个表格&#xff0c;部分表格采用虚拟滚动条 数据量有点大 接近快60s了&#xff0c;看一下是哪里导致的慢 后台请求方法执行并不慢 2024-12-04 15:21:52.889 INFO 69948 …

在服务器上实现本地python文件的依赖

1、在python中&#xff0c;一个python文件就可以视为一个模块进行导入 2、使用import 导入时&#xff0c;若使用pip 下载过可以直接导入 3、假如是自己写的同项目中的文件会去sys.path 中查找 比如说 我现在 test 下有一个 python文件 运行 下面的代码 打印的数据如上图所示p…

Python酷库之旅-第三方库Pandas(255)

目录 一、用法精讲 1206、pandas.tseries.offsets.SemiMonthEnd.is_on_offset方法 1206-1、语法 1206-2、参数 1206-3、功能 1206-4、返回值 1206-5、说明 1206-6、用法 1206-6-1、数据准备 1206-6-2、代码示例 1206-6-3、结果输出 1207、pandas.tseries.offsets.S…

大数据新视界 -- Hive 元数据管理:核心元数据的深度解析(上)(27 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义

文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代&#xff0c;安全问题已成为技术领域不可忽视的…

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:智行无忧停车场管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 1.1 项目功能 2.0 用户登录功能 3.0 首页界面 4.0 车辆信息管理功能 5.0 停车位管理功能 6.0 入场登记管理功能 7.0 预约管理功能 8.0 收费规则功能 9.0…

猎板 PCB特殊工艺:铸就电子行业核心竞争力新高度

在当今竞争激烈且技术驱动的电子制造领域&#xff0c;印制电路板&#xff08;PCB&#xff09;作为电子产品的关键基石&#xff0c;其特殊工艺的发展水平直接影响着整个行业的创新步伐与产品品质。猎板 PCB 凭借在厚铜板、孔口铺铜、HDI 板、大尺寸板以及高频高速板等特殊工艺方…

STM32 进阶 定时器3 通用定时器 案例2:测量PWM的频率/周期

需求分析 上一个案例我们输出了PWM波&#xff0c;这个案例我们使用输入捕获功能&#xff0c;来测试PWM波的频率/周期。 把测到的结果通过串口发送到电脑&#xff0c;检查测试的结果。 如何测量 1、输入捕获功能主要是&#xff1a;测量输入通道的上升沿和下降沿 2、让第一个…