抽象工廠模式
一、什麼是抽象工廠模式
抽象工廠模式是所有形態的工廠模式中最爲抽象和最其一般性的。抽象工廠模式可以向客戶端提供一個接口,使得客戶端在不必指定產品的具體類型的情況下,能夠創建多個產品族的產品對象。
二、產品族和產品等級結構
三、模式中包含的角色及其職責
1.抽象工廠(Creator)角色
抽象工廠模式的核心,包含對多個產品結構的聲明,任何工廠類都必須實現這個接口。
2.具體工廠(Concrete Creator)角色
具體工廠類是抽象工廠的一個實現,負責實例化某個產品族中的產品對象。
3.抽象(Product)角色
抽象模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
4.具體產品(Concrete Product)角色
抽象模式所創建的具體實例對象
總結:抽象工廠中方法對應產品結構,具體工廠對應產品族。
四、代碼:
package org.fbm.abstractfactory;
public abstract class Apple implements Fruit {
public abstract void get();
}
package org.fbm.abstractfactory;
public abstract class Banana implements Fruit {
public abstract void get();
}
package org.fbm.abstractfactory;
public interface Fruit {
public void get();
}
package org.fbm.abstractfactory;
public interface FruitFactroy {
public Fruit getApple();
public Fruit getBanana();
}
package org.fbm.abstractfactory;
public class NorthApple extends Apple {
public void get() {
System.out.println("北方的蘋果");
}
}
package org.fbm.abstractfactory;
public class NorthBanana extends Banana {
public void get() {
System.out.println("北方的香蕉");
}
}
package org.fbm.abstractfactory;
public class SouthApple extends Apple {
public void get() {
System.out.println("南方的蘋果");
}
}
package org.fbm.abstractfactory;
public class SouthBanana extends Banana {
public void get() {
System.out.println("南方的香蕉");
}
}
package org.fbm.abstractfactory;
public class NorthFruitFactory implements FruitFactroy {
@Override
public Fruit getApple() {
// TODO Auto-generated method stub
return new NorthApple();
}
@Override
public Fruit getBanana() {
// TODO Auto-generated method stub
return new NorthBanana();
}
}
package org.fbm.abstractfactory;
public class SouthFruitFactory implements FruitFactroy {
@Override
public Fruit getApple() {
// TODO Auto-generated method stub
return new SouthApple();
}
@Override
public Fruit getBanana() {
// TODO Auto-generated method stub
return new SouthBanana();
}
}
package org.fbm.abstractfactory;
public class MainClass {
public static void main(String[] args) {
FruitFactroy north = new NorthFruitFactory();
Fruit northApple = north.getApple();
northApple.get();
Fruit northBanana = north.getBanana();
northBanana.get();
FruitFactroy south=new SouthFruitFactory();
Fruit southApple=south.getApple();
southApple.get();
Fruit southBanana=south.getBanana();
southBanana.get();
}
}