【软考】向上转型 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();

虽然一种是设计模式,一种只是一个用法吧,这种风马牛不相及的比较或许能碰触一些想法。

共同点:都会用一个类来做这个创造实例的过程。

不同点:简单工厂中只是单纯的判断几种不同的情况 即 “如果是“+”,则。。 。“ 而第一个例子的特点就是突出了基类和子类的关系。”如果操作符是加,则。。“

然后我们再来看看 对象转型

通俗的说就是子类的对象可以基类的对象来使用。或基类的对象可以当做子类的对象来使用。当然还会有一些规则。如 基类的引用类型变量可以”指向“其子类的对象。

两个例子的确很像,只是通过这个去调动自己。真正的重点还在思考怎么样去学习。基础的比较,点滴积累。

时间: 2024-08-26 02:10:41

【软考】向上转型 VS 简单工厂的相关文章

拿什么应对你我的软考

话说软考也马上要开水一个月了,但是对于软考还不是很理解,今天就让我们来聊一聊那些年一起经历过的软考! 软考是全国计算机技术与软件专业技术资格(水平)考试(简称计算机与软件考试)是由国家人力资源和社会保障部与工业和信息化部组织领导的国家级考试,目的是科学.公正地对全国计算机与软件专业技术人员进行专业技术资格.职业资格认定和专业技术水平测试. 所以说软考是中国计算机界最高水平的考试!通过了考试下边这张图就可以用来描述你了! 那么在未来你就可以很坦然来做这些事情!看车,看房,看包包,还可以大胆的扶老奶

软考路——算法其实很简单

在参加中级软件设计师的考试中,公认的最难的一部分就是算法.可是自从老师给我们讲完算法之后,就感觉算法其实也没什么.软考中,算法被分为分治法.动态规划法.贪心算法和回溯法.那么,今天我们就来说一说这几种算法. 一.概念 1.分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同.递归的解这些子问题,然后将各子问题的解合并得到原问题的解. 适用范围:  1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问

基础学习day08---多态、简单工厂、Object类equals和toString

一.多态 1.1.多态概念 定义:某一类事物的多种存在形态.        例:动物中猫,狗.    猫这个对象对应的类型是猫类型:猫 x = new 猫();    同时猫也是动物中的一种,也可以把猫称为动物:动物  y = new 猫();    动物是猫和狗具体事物中抽取出来的父类型.    父类型引用指向了子类对象. 体现:    父类或者接口的引用指向或者接收自己的子类对象. 作用:    多态的存在提高了程序的扩展性和后期可维护性.        前提:    1. 需要存在继承或者

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

(三) 简单工厂模式

转载: http://www.cnblogs.com/zuoxiaolong/p/pattern4.html 上一章我们着重讨论了代理模式,以及其实现原理,相信如果你看完了整篇博文,应该就对代理模式很熟悉了. 本章我们讨论简单工厂模式,LZ当初不小心夸下海口说不和网络上传播的教学式模式讲解雷同,所以现在感觉写一篇博文压力颇大. 如何来介绍简单工厂呢,LZ着实费了不少心思,这个模式本身不复杂,但其实越是不复杂的模式越难写出特点,因为它太简单. 为了便于各位看后面例子的时候容易理解,LZ这里先给出引

软考之路--小桥流水人家

流水线,从小编生活了二十年的生活经历来看,流水线可以这样理解,从生活中的工厂入手,流水线上每个工人所作的工作都不同,但却是相连的,上面的工人做完了他的事就直接丢给下面的工人,而后一直这样传下去,直到这条流水线结束. 做流水线要眼疾手快,不然你手中的还没做完,上面又丢些下来,到时你就手忙脚乱,全线也就乱套了,总的来说生活中的流水线就是一种工业上的生产方式,指每一个生产单位只专注处理某一个片段的工作,以提高工作效率及产量.流水线,在我们的计算机中也有类似的概念,小编理解中的流水线,和计算机世界中的流

简单工厂模式(静态工厂)和工厂方法模式和抽象工厂模式

首先是简单工厂模式. 一句话描述就是用一个工厂类去封装new的工厂,返回新建的一个对象的引用.如果这个方法是静态的,就称之为静态工厂.一般来说这种做法很常见,尤其在一些JAVA工具类中.它的好处和坏处网上的分析都很多,但我觉得没必要分的这么细.最最最直接的好处是用起来简单,方便和不容易出错. 工厂方法模式则复杂一点.它的做法是在父类声明一个final方法用来真正被外部调用(在子类中被继承但是不允许覆盖).在这个方法中调用一个抽象方法去具体实现新建对象,可是这个抽象方法本身由子类实现. 举个例子就

我的软考之路(六)——数据结构与算法(4)之八大排序

排序是编程的基础,在程序中会常常使用,好的排序方法能够帮助你提高程序执行的效率,所以学好排序,打好基础,对于程序的优化会手到擒来.不管你的技术多么强,假设没有基础也强不到哪去. 不多说了,我们直接进入今天的主题. 总有人说排序非常难,可是我总认为非常easy,我们仅仅须要了解基本思想就好了,通过简单的样例来加深理解. 1.直接插入排序 (1)简单介绍:直接插入排序,从字面意思能够看出,直接插入数据完毕排序. (2)基本思想:在插入第i个数时,如果前i-1数已经排好序了,仅仅须要将第i个数插入到i

设计模式之 简单工厂模式详解

定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现.             定义中最重要的一句话就是,由一个工厂对象决定创建出哪一种产品类的实例,这个LZ在下面会专门举一个现实应用中的例子去展现. 另外给出简单工厂模式的类图,本类图以及上面的