抽象工廠(Abstract Factory)

目錄

含義

實例

實現 

抽象工廠

具體工廠 

抽象產品

具體產品

測試結果


含義

多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。一個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類可以創建多個具體產品類的實例。       

實例

抽象的工廠(抽象類):AbstractFactory

具體的工廠——實現抽象工廠:ModernFactory(現代工廠),MagicFactory(魔法工廠)

抽象的產品(抽象類):Weapon,Food,Vehicle

具體的產品 ——實現抽象產品:Ak47,Car,Bread;Broom,MushRoom,MagicStick

 

實現 

抽象工廠

package com.abstractfactory;

public abstract class AbastractFactory {
    abstract Food createFood();
    abstract Vehicle createVehicle();
    abstract Weapon createWeapon();
}

具體工廠 

package com.abstractfactory;

public class MagicFactory extends AbastractFactory {
    @Override
    Food createFood() {
        return new MushRoom();
    }

    @Override
    Vehicle createVehicle() {
        return new Broom();
    }

    @Override
    Weapon createWeapon() {
        return new MagicStick();
    }
}
package com.abstractfactory;


public class ModernFactory extends AbastractFactory {
    @Override
    Food createFood() {
        return new Bread();
    }

    @Override
    Vehicle createVehicle() {
        return new Car();
    }

    @Override
    Weapon createWeapon() {
        return new AK47();
    }
}

抽象產品

package com.abstractfactory;

public abstract class Food {
   abstract void printName();
}
package com.abstractfactory;

// 形容詞用接口,名詞用抽象類
public abstract class Vehicle { //interface
    abstract void go();
}
package com.abstractfactory;

public abstract class Weapon {
    abstract void shoot();
}

具體產品

package com.abstractfactory;

public class Bread extends Food{
    public void printName() {
        System.out.println("wdm");
    }
}
package com.abstractfactory;

public class MushRoom extends Food{
    public void printName() {
        System.out.println("dmg");
    }
}
package com.abstractfactory;

public class Car extends Vehicle{

    public void go() {
        System.out.println("Car go wuwuwuwuw....");
    }
}
package com.abstractfactory;

public class Broom extends Vehicle{
    public void go() {
        System.out.println("Car go wuwuwuwuw....");
    }
}
package com.abstractfactory;

public class AK47 extends Weapon{
    public void shoot() {
        System.out.println("tututututu....");
    }
}
package com.abstractfactory;

public class MagicStick extends Weapon{
    public void shoot() {
        System.out.println("diandian....");
    }
}

測試結果

package com.abstractfactory;

public class Main {
    public static void main(String[] args) {
        AbastractFactory f = new ModernFactory();

        Vehicle vehicle = f.createVehicle();
        vehicle.go();
        Weapon weapon = f.createWeapon();
        weapon.shoot();
        Food food = f.createFood();
        food.printName();

        System.out.println("------------------------");

        AbastractFactory f1 = new MagicFactory();
        Vehicle vehicle1 = f1.createVehicle();
        vehicle1.go();
        Weapon weapon1 = f1.createWeapon();
        weapon1.shoot();
        Food food1 = f1.createFood();
        food1.printName();
    }
}
Car go wuwuwuwuw....
tututututu....
wdm
------------------------
Car go wuwuwuwuw....
diandian....
dmg

 

發佈了87 篇原創文章 · 獲贊 18 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章