public class CTest
{
}/// <summary>
/// ATest是单例模式
/// </summary>
public class ATest
{
    CTest cTest = null;
    private ATest()
    {
        //
    }
    public static ATest GetInstance()
    {
        return new ATest();
    }
    public void OP1()
    {
        //对C的操作1
    }
    public void OP2()
    {
        //对C的操作2
    }
    public void OP3()
    {
        //对C的操作3
    }
    public void OP4()
    {
        //对C的操作4
    }
    public void OP5()
    {
        //对C的操作5
    }
}public class BTest
{
    private ATest aTest = ATest.GetInstance();
    
    //假设里面有数据
    private List<CTest> cList = new List<CTest>();
    public BTest()
    {
    }
    public void OP()
    {
        foreach (CTest cTest in cList)
        {
            //因为在 OP*里对C进行操作
            //问题: 我要把cTest 给传到 ATest 中的cTest
            aTest.OP1();
            aTest.OP2();
            aTest.OP3();
            aTest.OP4();
            aTest.OP5();
        }
    }
}问题: 我要把cTest 给传到 ATest 中的cTest
解决方案有如下:
1. 可以单独有个函数  完成这个功能
2. 把cTest 设置成属性
3. 把cTest 当作参数给OP*(这个肯定不行的,函数太多,太麻烦了)我想问的问题是否有其他的方法。(不要把ATest Class改成非单例模式)希望有人赐教。感觉有点吹毛求疵了。。有没有一种模式可以完成这样的功能?

解决方案 »

  1.   

    问题补充
    因为BTest的子类(很多个) 需要用到 这样的结构:
    foreach (CTest cTest in cList)
            {
                //因为在 OP*里对C进行操作(一堆函数中的1-2个)
                //问题: 我要把cTest 给传到 ATest 中的cTest
                aTest.OP1();
                aTest.OP2();
                aTest.OP3();
                aTest.OP4();
                aTest.OP5();
            }
    如果用上述前2种方法去实现的话,  总感觉有点别扭,所以才有这种吹毛求疵的  想法的 了
      

  2.   

    何必呢,直接让Atest公布一属性不就完了?如果你的五个操作步骤需要扩展,那请选择Builder设计模式,如果单是这样的代码,用了设计模式会被骂的
      

  3.   

    2. 把cTest 设置成属性
    这样不是很简单吗?
      

  4.   


    我们lead 就是认为  设置成属性 或者 用个函数完成感觉别扭,要想个其他的的办法去解决它。
    希望有人给我提供下其他的意见  在此先谢谢了。