例子结构:
MessageAll(消息抽象类)代码详情:
public abstract class MessageALL
{
/// <summary>
/// 发送消息
/// </summary>
public abstract void sentMessage();
}
MessageFactory(消息工厂类)代码详情:
public class MessageFactory
{
public static MessageALL GetMessage<T>() {
string realname = typeof(T).FullName;
MessageALL messageALL = null;
Assembly assembly = Assembly.GetExecutingAssembly();
messageALL =(MessageALL)assembly.CreateInstance(realname);
messageALL.sentMessage();
return messageALL;
}
}
QQMessage与WXMessage类中是实现消息抽象类中的抽象方法这里我只列出一个类的实现:
public class QQMessage : MessageALL
{
public override void sentMessage()
{
Console.WriteLine("发送qq消息中。。。。");
}
}
如何调用:
public void Utils(string value)
{
MessageALL messageALL=MessageFactory.GetMessage<QQMessage>();
Console.ReadKey();
}
说明思路:
这里我们需要创建一个抽象父类,再在抽象类中建立一些公共调用的抽象方法,子类继承并实现父类的抽象方法,再通过工厂类进行通用的实例化处理,这里我使用的是泛型的方式传递需要实例化的类,然后通过Assembly加载并实例化子消息类。在整个过程中避免了使用new来实例化对象。
作用:
个人理解有点像,过去的接线员(喂喂喂~我需要给张三打电话麻烦转接下),我们需要给那个人打电话就由接线员帮你转接。接线员的作用就与我们工厂类极像,我们需要实例化什么消息类型的类,那么我们的工厂类根据T的获取到的命名空间,创建对于的对象实例。
PS:本人菜鸟一枚,希望在我们程序员生涯留下点什么。若有啥不对或者待优化的地方,希望各位赐教。