日期:2014-05-18  浏览次数:20790 次

实例化对象之后的使用问题
A,B,C,D E,F三类,在类E对条件信息进行判断来选择实例化A,B,C,D其中的一个类,在F中使用E中实例化的对象,如何操作?

------解决方案--------------------
按照依赖倒置原则,F应该只使用公共的接口方法和属性,不使用ABCD类的特有的方法和属性,

E作为工厂类,创建实例后应该把接口引用传给F,或者说F调用E类的工厂方法获得接口引用,

探讨

你好,你的意思是我定义一个接口,A,B,C,D均继承自此接口,这样就避免了实例化对象不定的问题,但是我在E中实例化接口后,F中如何调用该实例化的属性的方法呢?

------解决方案--------------------
C# code

public interface I
{
    void Work();
}

public class A : I
{
    public void Work(){}
}

public class B : I
{
    public void Work(){}
}

public class C : I
{
    public void Work(){}
}

public class D : I
{
    public void Work(){}
}

public class E
{
    public static I CreateInstance()
    {
        switch(条件)
        {
            case 条件1:
                return new A();
            case 条件2:
                return new B();
            case 条件3:
                return new C();
            case 条件4:
                return new D();
            default:
                return null;
        }
    }
}

public class F
{
    I _instance;
    
    public F()
    {
        _instance = E.CreateInstance();
    }
    
    public void Work()
    {
        if(_instance != null)
        {
            _instance.Work();
        }
    }
}