关于petshop的数据工厂返射模式~~~~~~~~~~ 我依照petshop这样写了一个工程.但我发现在反射生成实例时.得到的类实例只能访问接口里定义的方法.而不能访问接口里没有的方法.这我就奇怪了.那不是要把接口和具体实现类的方法写成一对一的关系.这种方法好像是为了强制实现类必须实现. 不知道是不是这样.但感觉这样好麻烦???? 一定要写成一对一关系. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 得到的类实例只能访问接口里定义的方法.而不能访问接口里没有的方法.-------------------------------------------------------------------这个是当然的,要不然干吗要接口呢?难道只是摆设?这我就奇怪了.那不是要把接口和具体实现类的方法写成一对一的关系.-------------------------------------------------------------说实话我也很奇怪,为什么petshop要用反射来实例化呢,为啥不用new 呢?好好看看书,看看工厂方法是为了解决什么问题。然后再来问这个问题。模式虽好,但也不能乱用 我不看petshop这种浪费时间的例子。不过我估计着大概给你举例回答一下:我们假设有以下领域设计:class 鸭嘴兽:哺乳动物,I禽类{ ..... public bool 是否怀孕; public int I禽类.是否会飞;}class 人工繁殖鸭嘴兽:鸭嘴兽,I动物园里的动物{ public Image I动物园里的动物.图片; public void I动物园里的动物.捐款() { ...... }}关系数据库表可能是这样设计的: 饲养动物(饲养员姓名,动物编号) 动物(动物编号,真正类型) 鸭嘴兽(动物编号,是否怀孕,是否能飞) 人工繁殖鸭嘴兽(动物编号,图片)而程序的业务逻辑大致是:给出动物编号,然后再屏幕上显示这个动物的具体信息例如图片等,用户可以在网页上捐款。此时,程序首先根据动物编号找出真正的具体类型——人工繁殖鸭嘴兽,然后实例化它,然后返回的着一只人工饲养鸭嘴兽被赋值给网页定义的“I动物园里的动物”类型的变量,用于处理捐款。 显然,网页上就是针对“I动物园里的动物”类型的对象进行处理的。不论传给它的对象是什么类型,只要具有I动物园里的动物接口就可以了。页面并不处理“否怀孕,是否能飞”等特性,不知道也不过问,尽管传给它的对象可能(也可能)具有这些属性或方法,页面并不关心。因为业务的多态处理仅需要涉及“I动物园里的动物”接口类型。你说这里的“I动物园里的动物”跟“人工繁殖的鸭嘴兽”、“鸭嘴兽”、“哺乳动物”、“动物”有什么“麻烦的”意义对应关系呢?这中抽象、多态能力是很方便的。有些人很难理解不同类型的继承、接口的“is a”概念,只能理解对象之间“has a”的聚合关系,不能理解抽象的作用只能理解最直观的实体存在,那么所理解的系统设计就不是面向对象的,顶多是“基于对象”的,缺少几乎所有面向对象的好处。 尽管传给它的对象可能(也可能)具有 --> 尽管传给它的对象可能(也可能不)具有有什么“麻烦的”意义对应关系呢 --> 有什么“麻烦的”“一一对应关系”呢 “I动物园里的动物”其实跟其他概念没有什么关系,它们对象的某个实例也没有必然的联系。I动物园里的动物abc并不必然是鸭嘴兽abc,甚至也并不必然是动物abc,但是人工饲养鸭嘴兽xyz必然是鸭嘴兽xyz、动物xyz和I动物园里的动物xyz。这里的“是”是上面所说的“is a”关系。 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'Message'中的标识列指定显式值。 下载是否成功的判断 浏览次数问题 ie7中使用showModalDialog关闭子页出现的问题 求救出问题了,帮帮忙各位 datagrid取值 求教各位大虾,关于ListBox的!在线求! table用js动态添加行后,后台如何获取 高手帮助!!!! 一个简单问题 代码存库 页面内容过大时,如果回发页面时,IE会自动关闭?
-------------------------------------------------------------------
这个是当然的,要不然干吗要接口呢?难道只是摆设?这我就奇怪了.那不是要把接口和具体实现类的方法写成一对一的关系.
-------------------------------------------------------------
说实话我也很奇怪,为什么petshop要用反射来实例化呢,为啥不用new 呢?好好看看书,看看工厂方法是为了解决什么问题。然后再来问这个问题。
模式虽好,但也不能乱用
{
.....
public bool 是否怀孕;
public int I禽类.是否会飞;
}class 人工繁殖鸭嘴兽:鸭嘴兽,I动物园里的动物
{
public Image I动物园里的动物.图片;
public void I动物园里的动物.捐款()
{
......
}
}关系数据库表可能是这样设计的: 饲养动物(饲养员姓名,动物编号)
动物(动物编号,真正类型)
鸭嘴兽(动物编号,是否怀孕,是否能飞)
人工繁殖鸭嘴兽(动物编号,图片)而程序的业务逻辑大致是:给出动物编号,然后再屏幕上显示这个动物的具体信息例如图片等,用户可以在网页上捐款。此时,程序首先根据动物编号找出真正的具体类型——人工繁殖鸭嘴兽,然后实例化它,然后返回的着一只人工饲养鸭嘴兽被赋值给网页定义的“I动物园里的动物”类型的变量,用于处理捐款。
有什么“麻烦的”意义对应关系呢 --> 有什么“麻烦的”“一一对应关系”呢