目錄
含義
多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。一個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類可以創建多個具體產品類的實例。
實例
抽象的工廠(抽象類):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