一、模式介绍
改善在工厂方法模式中,扩展时新增产品类、工厂类,导致项目中类巨多的场面,减少系统的维护成本,且一个工厂可以生成多种产品,而不是同一种的产品,比如一个工厂既可以生产鞋子又可以衣服,而不是只能生产鞋子。
二、工厂方法模式
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、总结
理解抽象工厂模式的核心关键在于理解品牌家族的概念,简单工厂方法与工厂方法创建工厂的着眼于某类具体的产品,某个工厂与某个产品对应,而抽象工厂这是某个工厂与家族的产品对应,这个工厂可以生产这个品牌家族的一系列产品。如果新增品牌。则定义具体产品类,定义具体工厂类,然后调用抽象工厂方法即可。