组合模式类似建造者模式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CompositSample
{
abstract class AbstractFile
{
public abstract void Add(AbstractFile file);
public abstract void Remove(AbstractFile file);
public abstract AbstractFile GetChild( int i);
public abstract void KillVirus( );
}
class ImageFile:AbstractFile
{
private string Name;
public ImageFile(string name)
{
this.Name = name;
}
public override void Add(AbstractFile file)
{
Console.WriteLine("对不起,不支持此方法");
}
public override void Remove(AbstractFile file)
{
Console.WriteLine("对不起,不支持此方法");
}
public override AbstractFile GetChild(int i)
{
Console.WriteLine("对不起,不支持此方法");
return null;
}
public override void KillVirus()
{
Console.WriteLine($"对图像文件{Name}进行查杀");
}
}
class TextFile : AbstractFile
{
private string Name;
public TextFile(string name)
{
this.Name = name;
}
public override void Add(AbstractFile file)
{
Console.WriteLine("对不起,不支持此方法");
}
public override void Remove(AbstractFile file)
{
Console.WriteLine("对不起,不支持此方法");
}
public override AbstractFile GetChild(int i)
{
Console.WriteLine("对不起,不支持此方法");
return null;
}
public override void KillVirus()
{
Console.WriteLine($"对文本文件{Name}进行查杀");
}
}
class Fold:AbstractFile
{
private List<AbstractFile> fildlist = new List<AbstractFile>();
private string Name;
public Fold(string name)
{
this.Name = name;
}
public override void Add(AbstractFile file)
{
fildlist.Add(file);
}
public override void Remove(AbstractFile file)
{
fildlist.Remove(file);
}
public override AbstractFile GetChild(int i)
{
return fildlist[i];
}
public override void KillVirus()
{
Console.WriteLine($"对文件夹{Name}进行查杀");
foreach(var i in fildlist)
{
i.KillVirus();
}
}
}
class Program
{
static void Main(string[] args)
{
AbstractFile file1, file2, file3, file4, fold1;
fold1 = new Fold("我的资料");
file1 = new ImageFile("图片1.jpg");
file2 = new ImageFile("图片2.gnd");
file3 = new TextFile("文档1");
file4 = new TextFile("文档2");
fold1.Add(file1);
fold1.Add(file2);
fold1.Add(file3);
fold1.Add(file4);
fold1.KillVirus();
fold1.Remove(file2);
fold1.KillVirus();
Console.Read();
}
}
}