设计模式之对反射的理解

1. 第二点是直接从度娘那里Copy过来的,看了几遍,云里雾里,我只能说这个机制描述的真的很高深。

2. C#和Java是支持反射的,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

3. 之前学习设计模式之简单工厂时,记得Factory类里面的Create()方法用的是一个switch&case,像下面这样根据这个char c来创建对象:


class SimpleFactory  
{  
public:  
	Operator* CreateOperator(char c)  
	{  
		Operator* oper = NULL;  
		switch (c)  
		{  
		case '+':  
			oper = new OperatorAdd();  
			break;  
		case '-':  
			oper = new OperatorSub();  
			break;  
		case '*':  
			oper = new OperatorMul();  
			break;  
		case '/':  
			oper = new OperatorDiv();  
			break;  
		default:  
			break;  
		}  
		return oper;  
	}  
}; 

但是这样有一个不符合“开放-封闭”原则的地方,如果现在要增加一个新的运算符对象求余(OperatorMod),就得修改SimpleFactory的CreateOperator方法了,在里面增加一个case ‘%’,如何解决这个问题,用反射。

4. 如果CreateOperator()可以像下面这样,就不需要增加一个case '%'了。那这里反射便是:根据这个传递的className就可以构造出这个对象,亦即在运行时只要根据这个className我便可以动态的构建任意一个对象。


#define NEW_OBJECT(className) new className;

Operator* CreateOperator(char* className)  
{  
    Operator* oper = NULL;  
    oper = NEW_OBJECT(className);
}

5. 当然以上的NEW_OBJECT还过于简单. 猛地想到《深入浅出MFC》MFC六大关键技术之Dynamic Create(动态创建),这不就是反射嘛,原来搞了半天“反射”就是这么个东西,名字挺忽悠人的,云里雾里。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值