意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
水果类:
package com.feisi.enity;
public interface Fruit {
void eat();
}
苹果类:
package com.feisi.enity;
public class Apple implements Fruit {
@Override
public void eat() {
System.out.println("吃苹果");
}
}
香蕉类:
package com.feisi.enity;
public class Banana implements Fruit {
@Override
public void eat() {
System.out.println("吃香蕉");
}
}
工厂类:
package com.feisi.enity;
public class Factory {
//目的:创建Fruit对象
public static Fruit getFruit(String fruitName){
Fruit fruit = null;
if("apple".equals(fruitName)){
fruit = new Apple();
}else if("banana".equals(fruitName)){
fruit = new Banana();
}
return fruit;
}
}
测试类:
package com.feisi.enity;
public class Test {
public static void main(String[] args) {
Fruit fruit = Factory.getFruit("banana");
if(fruit!=null) {
fruit.eat();
}
}
}