前言:
工廠方法模式也屬于類的建立模式,也被稱為多态工廠模式,它與簡單工廠模式的不同是,工廠定義為抽象的,工廠的每個子類負責建立具體的實體類。這樣的好處是,增加新的實體,隻需要增加相應的工廠就可以了,不需要修改原工廠代碼。
怎麼實作:
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();
}
}