天天看點

java設計模式二之工廠方法設計模式

前言:

工廠方法模式也屬于類的建立模式,也被稱為多态工廠模式,它與簡單工廠模式的不同是,工廠定義為抽象的,工廠的每個子類負責建立具體的實體類。這樣的好處是,增加新的實體,隻需要增加相應的工廠就可以了,不需要修改原工廠代碼。

怎麼實作:

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();
    }
}      

繼續閱讀