现在是,定义了一组接口,在不同的类里实现了接口中的方法,现在我想通过一个 工厂或者说是一种方式,在调用的时候,直通过传入接口,返回接口的实现对象。 我设计模式了解的比较少,也不够扎实,请大家给点思路最好有代码,或者说哪个设计模式比较接近也可以,谢谢!
感觉应该是没说明白,补点代码!
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var user = Factory<IUser>.Create(); user.Login("username", "password"); var mail = Factory<IMail>.Create(); mail.SendMail("内容", "标题", "地址"); } } public class Factory<T> { public static T Create() { //就是这里 return default(T); } } public interface IUser { bool Login(string username, string pass); } public interface IMail { bool SendMail(string content, string title, string touser); } public class UserImp : IUser { public bool Login(string username, string pass) { throw new NotImplementedException(); } } public class MailImp : IMail { public bool SendMail(string content, string title, string touser) { throw new NotImplementedException(); } } }
在注释的地方怎么写,具体写什么,或者说用其他方式,而不是现在的样子。
最终想要的是,在前台调用的时候,只希望看到接口和帮助接口实例化对象的类,而不出现具体子类对象。
传入接口 怎么说
补充了一些内容。
@醉低调:
bool reslut=typeof(T).IsAssignableFrom(typeof(UserImp));可以用这个判断一下,true的话就返回
@Yu: 这样需要写好多个判断吧??
@醉低调: 可以用反射
@Yu: 刚你写的代码提醒了我,也想到了反射,不过具体怎么写??刚找了一堆反射的资料看的头疼,还是不知道怎么动态创建这个对象,求帮助啊。
@醉低调: 伪代码
var type = typeof(Test);
type.Assembly.CreateInstance(type.FullName) as T
@醉低调:
public class Factory<T> where T : class { public static T Create() { Assembly assembly = Assembly.LoadFrom(@"target.dll"); // 加载同一程序集的EXE 或 DLL foreach (Type t in assembly.GetTypes()) { if (t.GetInterface(typeof(T).Name) != null) { return System.Activator.CreateInstance(t) as T; } } return null; } }
这个可以参考下Ioc的相关资料。
谢谢,已经找到了一些关于IOC的资料,问题基本解决。