简单工厂模式又叫静态工厂模式,通过专门定义一个工厂类来创建一些类的实例,被创建的实例通常都具有共同的父类或实现了同一接口。
【例4-16】
举例演示静态工厂模式。
下面以一个动物工厂类创建不同动物为例进行说明。
步骤1:在项目chapter4下新建一个cn.linaw.chapter4.demo05包,在包下抽象出一个Animal接口,里面声明所有动物都具有的shout方法,如图4-38所示。
图4-38 Animal接口
步骤2:假设该动物工厂有能力生产小狗,于是定义一个实现了Animal接口的Dog类,如图4-39所示。
图4-39 Dog实现类
假设现在该动物工厂又有能力生产小猫,于是定义一个实现了Animal接口的Cat类,如图4-40所示。
图4-40 Cat实现类
步骤3:定义一个动物工厂类AnimalFactory,给外部用户使用,动物工厂类可以根据用户需要专门生成各种动物,如图4-41所示。
图4-41 动物工厂类AnimalFactory
步骤4:通过一个测试类Animal Factory Test来看外部用户是如何利用Animal Factory动物工厂类来创建各类动物的,如图4-42所示。
图4-42 用户调用动物工厂类创建对象
可见,本例工厂类根据传入的不同参数,动态决定创建对应产品类的实例。同时,本例统一使用父接口Animal变量指向该接口实现类的对象,用到了接口多态。
总之,简单工厂模式的优点是调用者只需面对工厂类就能得到需要的对象,用户只管消费对象,不负责对象的创建,该模式明确了各个类的职责。简单工厂类也有缺点,例如工厂类集中了所有实例对象的创建逻辑,如果后期频繁增加新的产品类,或者某些产品类对象的创建方式发生了改变,则需要不断修改工厂类,不利于维护。
项目总结(www.xing528.com)
本项目介绍了面向对象程序设计三大特性中的继承和多态。本项目详细介绍了子类在继承父类过程中涉及的方方面面,包括super和final关键字的使用、方法重写以及超类Object的重要方法。继承是多态存在的前提,也是三大特性中最难以理解的部分,需要重点把握。抽象类是一种特殊的类,而接口是比抽象类还抽象的规范,在面向接口编程思想中,多态无处不在。最后,讲解了设计模式中的简单工厂模式,它属于创建型模式,提供了一种创建对象的最佳方式,其中也用到了多态。本项目是面向对象程序设计的进阶部分,需要全面掌握。
项目作业
1.填空题。
(1)Java中,允许使用已存在的类作为基础创建新的类,这种技术称为___________。
(2)定义一个类,如果不想被继承,可以在类前使用___________关键字。
(3)如果子类想使用父类中的成员,可以使用__________关键字引用父类成员。
(4)在Java中,如果类没有显式声明继承的父类,则该类继承自___________类。
(5)如果一个类实现一个接口,但是并没有实现接口中定义的全部抽象方法,则该类必须定义为___________类。
(6)不存在继承关系的前提下,可以实现方法重写吗?答案是___________。
(7)类的继承是单继承,而接口可以是多继承,这种说话正确吗?答案是___________。
(8)在JDK 1.7中,接口只能定义常量和抽象方法,这种说话正确吗?答案是___________。
2.简述子类创建对象时构造方法的执行过程。
3.简述final关键字的用法。
4.简述super关键字的用法。
5.简述Object类常用的方法。
6.简述什么是多态,什么是向上转型和向下转型。
7.简述抽象类和接口的区别,什么是面向接口编程。
8.编写一个继承自Circle的圆环类CircleRing,拥有一个新的double型成员属性innerRadius。请完成CircleRing的构造方法(包括无参和有参),根据圆环的面积(外圆面积-内圆面积)和周长(外圆周长+内圆周长)公式重写get Area方法和getCircumference方法,重写toString()方法。编写一个测试类CircleRing Test来验证该类以上功能。
9.自己设计一个接口,定义常量和抽象方法,并提供1~2个实现类。在测试类中进行测试,注意测试中要体现多态。
10.上机实践书中出现的案例,可自由发挥修改。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。