首页 新闻 赞助 找找看

.net一个设计模式问题,求高手解答

0
悬赏园豆:20 [待解决问题]

本来以为简单工厂模式能实现的,发现不行。是设计上存在问题吗? 有合适的设计模式吗?

 

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);
            }
        }
    }
}
grayhound的主页 grayhound | 初学一级 | 园豆:184
提问于:2013-05-24 17:17
< >
分享
所有回答(4)
0

搞不懂你的说的啥?

DYStudio.Net | 园豆:1747 (小虾三级) | 2013-05-24 17:26
0

用泛型工厂吧

静女 | 园豆:27 (初学一级) | 2013-05-25 09:09
0

一定要多个子类吗?一个类不行吗?方法多重载一下不就行啦?

丫的 | 园豆:1575 (小虾三级) | 2013-05-25 09:40
0

可以使用策略模式,然后子类有不同的参数

  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
        }
    }

小AI | 园豆:354 (菜鸟二级) | 2013-08-09 20:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册