一、模式介紹
改善在工廠方法模式中,擴展時新增產品類、工廠類,導致項目中類巨多的場面,減少系統的維護成本,且一個工廠可以生成多種產品,而不是同一種的產品,比如一個工廠既可以生產鞋子又可以衣服,而不是只能生產鞋子。
二、工廠方法模式
1、實現步驟
第一步: 定義產品的抽象基類,如鞋子(Shoes.class),衣服(Clothe.class)
// 1、定義鞋 產品抽象基類
abstract class Shoes {// 展示logopublic abstract void showLogo();
}
// 1、定義衣服 產品抽象基類
abstract class Clothe {// 展示logopublic abstract void showLogo();
}
第二步:定義具體產品類,繼承產品抽象基類,如飛躍牌鞋子(FeiYueShoes.class),飛躍牌衣服(FeiYueClothe.class),回力牌鞋子(HuiLiShoes.class),回力牌衣服(HuiLiClothe.class)
//2.定義具體品牌的鞋類,繼承鞋抽象基類
public class FeiYueShoes extends Shoes {@Overridepublic void showLogo() {System.out.println("這是飛躍鞋");}
}
//2.定義具體品牌的衣服,繼承鞋抽象基類
public class FeiYueClothe extends Clothe {@Overridepublic void showLogo() {System.out.println("這是飛躍衣服");}
}
//2.定義具體品牌的鞋類,繼承鞋抽象基類
public class HuiLiShoes extends Shoes {@Overridepublic void showLogo() {System.out.println("這是回力鞋");}
}
//2.定義具體品牌的衣服,繼承衣服抽象基類
public class HuiLiClothe extends Clothe {@Overridepublic void showLogo() {System.out.println("這是回力衣服");}
}
第三步:定義抽象工廠接口(AbstractFactory.class),說明工廠具體生產什么產品,鞋子,衣服,即抽象工廠生產抽象產品
//3 定義抽象工廠接口
interface AbstractFactory {// 生產鞋子Shoes produceShoes();// 生產衣服Clothe produceClothe();
}
第四步:定義生產具體產品的具體工廠類,實現抽象工廠類方法,如飛躍工廠(FeiYueFactory.class)、回力工廠(HuiLiFactory.class)
// 4 定義生產飛躍產品的的具體工廠類
public class FeiYueFactory implements AbstractFactory {@Overridepublic Shoes produceShoes() {return new FeiYueShoes();}@Overridepublic Clothe produceClothe() {return new FeiYueClothe();}
}
// 4 定義生產回力產品的的具體工廠類
public class HuiLiFactory implements AbstractFactory {@Overridepublic Shoes produceShoes() {return new HuiLiShoes();}@Overridepublic Clothe produceClothe() {return new HuiLiClothe();}
}
第五步:調用抽象工廠方法(AbstractFactoryExample.class) (先實例化具體工廠類,然后調用方法生成具體產品(實例化具體產品類),最后調用產品方法、屬性)
// 5 調用抽象工廠方法
public class AbstractFactoryExample {public static void main(String[] args) {//飛躍工廠FeiYueFactory feiYueFactory = new FeiYueFactory();// 生產飛躍鞋子feiYueFactory.produceShoes().showLogo();// 生產飛躍衣服feiYueFactory.produceClothe().showLogo();//回力工廠HuiLiFactory huiLiFactory = new HuiLiFactory();// 生產回力鞋子huiLiFactory.produceShoes().showLogo();// 生產回力衣服huiLiFactory.produceClothe().showLogo();}
}
2、總結
理解抽象工廠模式的核心關鍵在于理解品牌家族的概念,簡單工廠方法與工廠方法創建工廠的著眼于某類具體的產品,某個工廠與某個產品對應,而抽象工廠這是某個工廠與家族的產品對應,這個工廠可以生產這個品牌家族的一系列產品。如果新增品牌。則定義具體產品類,定義具體工廠類,然后調用抽象工廠方法即可。