设计模式漫谈之组合模式
清明节了,我只有大年初一祭祖。所以也没回家,看了我的团长我的团,看的头晕,所以告诉自己不能这样看下去了,否则这三天又白过了,虽然我没女朋友,已经单身好几年了,但是孤独的日子,我应该更充实。
突然感觉程序员如果走技术路线,压力挺大的。学不完的技术,否则竞争力没有。所以老程序员,最关键的就是编程思想。玩编程思想就是玩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或汇编,这样对编程思想有很大的指导,也可让自己进入新的境界。
看了,我的团长我的团,感悟到人确实要充满希望的活着,也不能太安逸。