本来以为简单工厂模式能实现的,发现不行。是设计上存在问题吗? 有合适的设计模式吗?
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication2 { class Father { public virtual void Calc(object obj1) { } public virtual void Calc(object obj1, object obj2) { } } /// <summary> /// 子类1只需要一个参数的方法 /// </summary> class Child1 : Father { public override void Calc(object obj1) { // } } /// <summary> /// 子类2只需要两个参数的方法 /// </summary> class Child2 : Father { public override void Calc(object obj1, object obj2) { // } } /// <summary> /// 两个子类(可能多个),在Calc时,需要使用不同的资源。 /// 不需要的资源希望不要一股脑儿全部传给子类方法,子类又不用这个资源。 /// 以下代码很别扭,感觉工厂模式也不能解决灵活性的问题。 /// 求高手给出一个好的设计模式 /// </summary> class Program { static void Main(string[] args) { MyResource1 res1; MyResource2 res2; Father someThing = Load(...); //获取子类对象 if(someThing.GetType() == typeof(Child1)) { someThing.Calc(res1); } else if(someThing.GetType() == typeof(Child2)) { someThing.Calc(res1,res2); } } } }
搞不懂你的说的啥?
用泛型工厂吧
一定要多个子类吗?一个类不行吗?方法多重载一下不就行啦?
可以使用策略模式,然后子类有不同的参数
public abstract class Father
{
private object obj1;
protected object Obj1
{
get { return obj1; }
}
protected Father(object obj1) { this.obj1 = obj1;
}
public abstract void Calc();
}
public class Child1 : Father
{
public Child1(object obj1)
: base(obj1) { }
public override void Calc()
{
//do something with obj1
}
}
public class Child2 : Father
{
private object obj2;
public Child2(object obj1, object obj2) : base(obj1)
{
this.obj2 = obj2;
}
public override void Calc()
{
//do something with obj1 and obj2
}
}