首页 > 代码库 > 【软考】向上转型 VS 简单工厂
【软考】向上转型 VS 简单工厂
今天我们不讲概念,先一起看一段程序。
public class Test{ public static void main(String args[]){ Test test=new Test(); Animal a=new Animal("name"); Cat c=new Cat("catname","name"); Dog d=new Dog("dogname","black"); test.f(a);test.f(c);test.f(d); } public void f(Animal a){ System.out.println("name:"+a.name); if(a instanceof Cat){ Cat cat=(Cat)a; System.out.println(""+cat.eyescolor+"eyes"); }else if(a instanceof Dog){ Dog dog=(Dog)a; System.out.println(""+dog.furColor+"fur"); } } } }
这是一段比较简单的代码。对象转型实例。主程序中实例化了一个动物,一个猫一个狗。最妙的地方是f(Animal a)方法封装了cat和dog 的变化。使得客户端可以直接使用以下语句得到各自想要的结果。
test.f(a);test.f(c);test.f(d);
而关键语句if(a instanceof Cat) 就是对象转型的一个具体实例。也就是如果动物a实例化的是一只猫,那么就是猫的属性。也就是一个基类的引用类型变量可以“指向”其子类的对象。
但是但是,这不是我想说的。
看到上面的一段程序 我突然就想到了之前学的设计模式。简单工程中的计算器的例子和这个好像。
public class OperationFactory { public static Operation createOperate(string operate) { Operation oper=null; switch(operate){ case"+"; oper=new OperationAdd(); break; case"-"; oper=new OperationSub(); break; case"*"; oper=new OperationMul(); break; case"/"; oper=new OperationDiv(); break; } return oper; } }
客户端
Operation oper; oper=OperationFactory.createOperate("+"); oper.NumberA=1; oper.NumberB=2; double result=oper.GetResult();
虽然一种是设计模式,一种只是一个用法吧,这种风马牛不相及的比较或许能碰触一些想法。
共同点:都会用一个类来做这个创造实例的过程。
不同点:简单工厂中只是单纯的判断几种不同的情况 即 “如果是“+”,则。。 。“ 而第一个例子的特点就是突出了基类和子类的关系。”如果操作符是加,则。。“
然后我们再来看看 对象转型
通俗的说就是子类的对象可以基类的对象来使用。或基类的对象可以当做子类的对象来使用。当然还会有一些规则。如 基类的引用类型变量可以”指向“其子类的对象。
两个例子的确很像,只是通过这个去调动自己。真正的重点还在思考怎么样去学习。基础的比较,点滴积累。
【软考】向上转型 VS 简单工厂
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。