前言:
工厂方法模式也属于类的创建模式,也被称为多态工厂模式,它与简单工厂模式的不同是,工厂定义为抽象的,工厂的每个子类负责创建具体的实体类。这样的好处是,增加新的实体,只需要增加相应的工厂就可以了,不需要修改原工厂代码。
怎么实现:
1、需要实体类:要被创建的类
2、被创建的类的共同父类:多态的体现,负责所有实例的公共接口,在工厂类中接受实体对象
3、抽象工厂类:所有工厂类的父类
4、工厂类:创建实体类,继承抽象工厂类,多态的体现
代码:
水果类父类:
package com.xhx.designpattern;
public interface Fruit {
/**
* 水果
*/
void get();
}
苹果类:
package com.xhx.designpattern;
public class Apple implements Fruit{
public void get(){
System.out.println("我是苹果");
}
}
香蕉类:
package com.xhx.designpattern;
public class Banana implements Fruit{
public void get(){
System.out.println("我是香蕉");
}
}
工厂类父类:
package com.xhx.designpattern;
public interface FruitFactory {
Fruit getFruit();
}
苹果工厂:
package com.xhx.designpattern;
public class AppleFactory implements FruitFactory {
@Override
public Fruit getFruit() {
return new Apple();
}
}
香蕉工厂:
package com.xhx.designpattern;
public class BananaFactory implements FruitFactory {
@Override
public Fruit getFruit() {
return new Banana();
}
}
启动测试类:
package com.xhx.designpattern;
public class App
{
/**
* 简单工厂模式,增加新类一般都需要修改原来的工厂
* 工厂方法模式把工厂定义为接口,增加新类同样增加具体工厂类
* @param args
*/
public static void main( String[] args )
{
//获得AppleFactory
FruitFactory fruitFactory = new AppleFactory();
Fruit apple = fruitFactory.getFruit();
apple.get();
//获得BananaFactory
FruitFactory fruitFactory1 = new BananaFactory();
Fruit banana = fruitFactory1.getFruit();
banana.get();
}
}
package com.xhx.designpattern;
public class Pear implements Fruit {
@Override
public void get() {
System.out.println("我是梨子");
}
}
package com.xhx.designpattern;
public class PearFactory implements FruitFactory {
@Override
public Fruit getFruit() {
return new Pear();
}
}