一、模式介绍
改善在工厂方法模式中,扩展时新增产品类、工厂类,导致项目中类巨多的场面,减少系统的维护成本,且一个工厂可以生成多种产品,而不是同一种的产品,比如一个工厂既可以生产鞋子又可以衣服,而不是只能生产鞋子。
二、工厂方法模式
1、实现步骤
第一步: 定义产品的抽象基类,如鞋子(Shoes.class),衣服(Clothe.class)
// 1、定义鞋 产品抽象基类
abstract class Shoes {
// 展示logo
public abstract void showLogo();
}
// 1、定义衣服 产品抽象基类
abstract class Clothe {
// 展示logo
public abstract void showLogo();
}
第二步:定义具体产品类,继承产品抽象基类,如飞跃牌鞋子(FeiYueShoes.class),飞跃牌衣服(FeiYueClothe.class),回力牌鞋子(HuiLiShoes.class),回力牌衣服(HuiLiClothe.class)
//2.定义具体品牌的鞋类,继承鞋抽象基类
public class FeiYueShoes extends Shoes {
@Override
public void showLogo() {
System.out.println("这是飞跃鞋");
}
}
//2.定义具体品牌的衣服,继承鞋抽象基类
public class FeiYueClothe extends Clothe {
@Override
public void showLogo() {
System.out.println("这是飞跃衣服");
}
}
//2.定义具体品牌的鞋类,继承鞋抽象基类
public class HuiLiShoes extends Shoes {
@Override
public void showLogo() {
System.out.println("这是回力鞋");
}
}
//2.定义具体品牌的衣服,继承衣服抽象基类
public class HuiLiClothe extends Clothe {
@Override
public void showLogo() {
System.out.println("这是回力衣服");
}
}
第三步:定义抽象工厂接口(AbstractFactory.class),说明工厂具体生产什么产品,鞋子,衣服,即抽象工厂生产抽象产品
//3 定义抽象工厂接口
interface AbstractFactory {
// 生产鞋子
Shoes produceShoes();
// 生产衣服
Clothe produceClothe();
}
第四步:定义生产具体产品的具体工厂类,实现抽象工厂类方法,如飞跃工厂(FeiYueFactory.class)、回力工厂(HuiLiFactory.class)
// 4 定义生产飞跃产品的的具体工厂类
public class FeiYueFactory implements AbstractFactory {
@Override
public Shoes produceShoes() {
return new FeiYueShoes();
}
@Override
public Clothe produceClothe() {
return new FeiYueClothe();
}
}
// 4 定义生产回力产品的的具体工厂类
public class HuiLiFactory implements AbstractFactory {
@Override
public Shoes produceShoes() {
return new HuiLiShoes();
}
@Override
public 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、总结
理解抽象工厂模式的核心关键在于理解品牌家族的概念,简单工厂方法与工厂方法创建工厂的着眼于某类具体的产品,某个工厂与某个产品对应,而抽象工厂这是某个工厂与家族的产品对应,这个工厂可以生产这个品牌家族的一系列产品。
如果新增品牌。则定义具体产品类,定义具体工厂类,然后调用抽象工厂方法即可。