设计模式漫谈之组合模式
清明节了,我只有大年初一祭祖。所以也没回家,看了我的团长我的团,看的头晕,所以告诉自己不能这样看下去了,否则这三天又白过了,虽然我没女朋友,已经单身好几年了,但是孤独的日子,我应该更充实。
突然感觉程序员如果走技术路线,压力挺大的。学不完的技术,否则竞争力没有。所以老程序员,最关键的就是编程思想。玩编程思想就是玩CPU和内存的,以计算机的思维命令计算机。
调用方法的过程就是进栈的过程,最后调用的,先出栈执行。
今天扯组合模式。
数据库经典的主外键关系是这样操作的,插入的时候,必须先插主表,再插从表,删除的时候必须先删从表,再删主表。
组合在表示对象之间关系的时候是表示整体与部分之间的关系。
设计模式主要是解决类似问题的一种解决方案。
现在上例子,我来解释:
//抽象类描述是个什么东西(构造函数),大概能干啥(抽象方法)
abstract class Company
{
protected string name;
public Company(string name)
{
this.name = name;
}
public abstract void Add(Company c);
public abstract void Remove(Company c);
public abstract void Display(int depth);
public abstract void LineOfDuty();
}
//具体的整体部分
class ConcreteCompany : Company
{
//这个集合存部分部分
private List<Company> children = new List<Company>();
public ConcreteCompany(string name)
: base(name)
{ }
public override void Add(Company c)
{
children.Add(c);
}
public override void Remove(Company c)
{
children.Remove(c);
}
//负责部分
public override void Display(int depth)
{
Console.WriteLine(new String('-', depth) + name);
foreach (Company component in children)
{
component.Display(depth + 2);
}
}
public override void LineOfDuty()
{
foreach (Company component in children)
{
component.LineOfDuty();
}
}
}
//部分1
class HRDepartment : Company
{
public HRDepartment(string name)
: base(name)
{ }
public override void Add(Company c)
{
}
public override void Remove(Company c)
{
}
//只负责自身部分
public override void Display(int depth)
{
Console.WriteLine(new String('-', depth) + name);
}
public override void LineOfDuty()
{
Console.WriteLine("{0} 员工招聘培训管理", name);
}
}
//部分2
class FinanceDepartment : Company
{
public FinanceDepartment(string name)
: base(name)
{ }
public override void Add(Company c)
{
}
public override void Remove(Company c)
{
}
public override void Display(int depth)
{
Console.WriteLine(new String('-', depth) + name);
}
public override void LineOfDuty()
{
Console.WriteLine("{0} 公司财务收支管理", name);
}
}
总结:组合模式描述的是整体与部分的关系。简单理解为对象与对象集合的关系。不扯了,工作5年以上的程序员建议看看C或汇编,这样对编程思想有很大的指导,也可让自己进入新的境界。
看了,我的团长我的团,感悟到人确实要充满希望的活着,也不能太安逸。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?