public abstract class animal
{
public abstract void eat();
}
public class dog : animal
{
public string c1;
public override void eat()
{
Console.Write("dog eat");
}
public void guid()
{
Console.Write("dog guid");
}
}
public class cat : animal
{
public override void eat()
{
Console.Write("cat eat");
}
public void catchmouse()
{
Console.Write("cat catch_mouse");
}
}
/// <summary>
/// 抽象工厂接口
/// </summary>
interface animalfactory
{
animal createanimal();
}
public class dogfactory : animalfactory
{
public animal createanimal()
{
return new dog();
}
}
public class catfactory : animalfactory
{
public animal createanimal()
{
return new cat();
}
}
/// <summary>
/// 实现类
/// </summary>
public class action
{
/// <summary>
/// 主人喂养
/// </summary>
public void feed()
{
animalfactory afactory = new dogfactory();
animalfactory afactory2 = new catfactory();
animal dog1 = afactory.createanimal();
animal cat1 = afactory2.createanimal();
dog1.eat();
cat1.eat();
}
/// <summary>
/// 吃饱要干活了,要他们各自干各自的,如果这样上面的类都要让实现类知道,不是增加了耦合了吗??怎么改动才是最好的呢
/// </summary>
public void work()
{
dog dog1 = new dog();
dog1.guid();
cat cat1 = new cat();
cat1.catchmouse();
}
}
------解决思路----------------------
工厂都不同,那你是工厂方法模式了啊,专有的行为算不上耦合吧
对于每种动物各自的行为,设计模式里面对这个有个原则叫接口最小化,你这里就需要增加接口
IDog{guid}
ICat{catchmouse}
然后通过接口将特定的行为暴露出来
其实这里工厂已经不能满足你的要求了
你可以通过命令或者外观来封装work这个指令(行为)
------解决思路----------------------
如果你的 animal 都有一个 work 方法要继承的话,为什么不在父类上抽象出来?