设计模式漫谈之组合模式

清明节了,我只有大年初一祭祖。所以也没回家,看了我的团长我的团,看的头晕,所以告诉自己不能这样看下去了,否则这三天又白过了,虽然我没女朋友,已经单身好几年了,但是孤独的日子,我应该更充实。

突然感觉程序员如果走技术路线,压力挺大的。学不完的技术,否则竞争力没有。所以老程序员,最关键的就是编程思想。玩编程思想就是玩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或汇编,这样对编程思想有很大的指导,也可让自己进入新的境界。

看了,我的团长我的团,感悟到人确实要充满希望的活着,也不能太安逸。

相关推荐