工程模式--基于Java多态性实现
@
工厂模式----Java对象多态性实现
实现说明
工厂模式,即用户给出不同的需求信号,通过一个工厂类生产出(返回)不相同的同类商品(对象)。
在java中,我们通过设计一个代表物体总体特征和行为的接口,再设计多个实现此接口的类,通过一个工厂类,返回此工厂类中特定的对象。
通俗地讲,我们大家都要吃水果或买水果,但是一般会去超市或者水果店进行选购,此时,水果店就是一个水果工厂,可以生产不同种类的水果,但都属于水果,通过用户给出不同的需求为用户提供不同的水果。
基本原理
在java的多态性中,通过对象的向上转型,可以对接口或抽象类进行实例化,此时实例化对象的方法已被子类实例化对象所覆写,所以实例化的接口或抽象类调用的行为方法即为某个特定产品的属性或行为,从而实现了生产出不同产品的功能。
对象的向上转型:
父类 父类对象 = 子类实例;
对象的向下转型(前提此父类实力已向上转型):
子类 子类对象 = (子类)父类实例;
简单的案例来演示一下哦
package chapter_six;
interface Fruit{ //定义一个水果的接口
public void eat(); //定义吃水果的方法
}
class Apple implements Fruit{ //定义子类Apple
@Override//覆写eat()方法
public void eat() {
System.out.println("正在吃苹果...");
}
}
class Orange implements Fruit{ //定义子类Orange
@Override//覆写eat()方法
public void eat() {
System.out.println("正在吃橙子...");
}
}
class Banana implements Fruit{ //定义子类Banana
@Override//覆写eat()方法
public void eat() {
System.out.println("正在吃香蕉...");
}
}
//定义水果的工厂类,负责生产不同的水果类对象
class Factory{
/**
* 定义工厂类的获取产品对象的方法,根据用户传递的不同参数,
* 返回不同对象
* @param class_name
* @return
*/
public static Fruit getInstance(String class_name){
Fruit fruit = null; //定义接口对象,初始化为null
switch (class_name){
case "Apple": //若用户选择Apple
fruit = new Apple(); //根据对象的向上转型原理,将Apple实例赋值给fruit对象
break;
case "Orange": //若用户选择Orange
fruit = new Orange(); //将Orange实例化对象向上转型赋值给fruit对象
break;
case "Banana": //用户选择Banana
fruit = new Banana(); //将Banana的实例化对象向上转型赋值给fruit对象
break;
default:
fruit = null; //否则设置fruit对象为null
break;
}
return fruit; //返回生产出的fruit对象
}
}
public class Pag215 {
public static void main(String[] args) {
Fruit apple = Factory.getInstance("Apple"); //生产Apple水果
Fruit orange = Factory.getInstance("Orange"); //生产Orange水果
Fruit banana = Factory.getInstance("Banana"); //生产Banana水果
apple.eat(); //分别吃水果
orange.eat();
banana.eat();
}
}
案例运行结果:
正在吃苹果...
正在吃橙子...
正在吃香蕉...
小小的总结
哈哈哈,没想到java的多态性还有这样的应用,真是学海无涯啊,另外类似于这种设计的还有代理模式、适配器模式等,有兴趣的小伙伴可以自己查阅学习哦,哈哈,如果有什么问题或讨论,欢迎在下方留言哦。