首页 理论教育 Java程序设计中的简单工厂模式

Java程序设计中的简单工厂模式

时间:2023-11-01 理论教育 版权反馈
【摘要】:简单工厂模式又叫静态工厂模式,通过专门定义一个工厂类来创建一些类的实例,被创建的实例通常都具有共同的父类或实现了同一接口。总之,简单工厂模式的优点是调用者只需面对工厂类就能得到需要的对象,用户只管消费对象,不负责对象的创建,该模式明确了各个类的职责。

Java程序设计中的简单工厂模式

简单工厂模式又叫静态工厂模式,通过专门定义一个工厂类来创建一些类的实例,被创建的实例通常都具有共同的父类或实现了同一接口

【例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.上机实践书中出现的案例,可自由发挥修改。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈