五、抽象工厂模式代码示例
如果要新增 产品族 , 只需要增加 产品族工厂 , 对应的产品类 即可 ;
如果要新增 产品等级 , 很麻烦 , 需要修改所有的产品族工厂 , 这就违背了开闭原则 ;
产品等级结构固定 , 需要多个产品组合在一起形成产品族的 业务场景 , 适合使用抽象工厂模式 ;
业务场景 : 有两个电器品牌 , 美的 和 格力 ; 每个品牌下都有 冰箱 和 空调 产品 ;
1、冰箱抽象类
package abstractfactory; /** * 冰箱抽象类 */ public abstract class Fridge { public abstract void produce(); }
2、美的冰箱实现类
package abstractfactory; /** * 美的冰箱 */ public class MideaFridge extends Fridge { @Override public void produce() { System.out.println("生产美的冰箱"); } }
3、格力冰箱实现类
package abstractfactory; /** * 格力冰箱 */ public class GreeFridge extends Fridge { @Override public void produce() { System.out.println("生产格力冰箱"); } }
4、空调抽象类
package abstractfactory; /** * 空调抽象类 */ public abstract class AirConditioner { public abstract void produce(); }
5、美的空调实现类
package abstractfactory; /** * 美的空调 */ public class MideaAirConditioner extends AirConditioner { @Override public void produce() { System.out.println("生产美的空调"); } }
6、格力空调实现类
package abstractfactory; /** * 格力空调 */ public class GreeAirConditioner extends AirConditioner { @Override public void produce() { System.out.println("生产格力空调"); } }
7、工厂抽象接口 ( 重点 )
package abstractfactory; /** * 抽象工厂方法 */ public interface Factory { /** * 生产冰箱 * @return */ Fridge getFridge(); /** * 生产空调 * @return */ AirConditioner getAirConditioner(); }
8、美的工厂实现类 ( 重点 )
package abstractfactory; /** * 美的工厂 */ public class MideaFactory implements Factory { @Override public Fridge getFridge() { return new MideaFridge(); } @Override public AirConditioner getAirConditioner() { return new MideaAirConditioner(); } }
9、格力工厂实现类 ( 重点 )
package abstractfactory; /** * 格力抽象工厂 */ public class GreeFactory implements Factory { @Override public Fridge getFridge() { return new GreeFridge(); } @Override public AirConditioner getAirConditioner() { return new GreeAirConditioner(); } }
10、测试类
package abstractfactory; public class Main { public static void main(String[] args) { // 生产 美的 品牌的 冰箱 和 空调 Factory mideaFactory = new MideaFactory(); // 美的冰箱 Fridge mideaFridge = mideaFactory.getFridge(); mideaFridge.produce(); // 美的空调 AirConditioner mideaAirConditioner = mideaFactory.getAirConditioner(); mideaAirConditioner.produce(); System.out.println(); // 生产 格力 品牌的 冰箱 和 空调 Factory greeFactory = new GreeFactory(); // 格力冰箱 Fridge greeFridge = greeFactory.getFridge(); greeFridge.produce(); // 格力空调 AirConditioner greeFridgeAirConditioner = greeFactory.getAirConditioner(); greeFridgeAirConditioner.produce(); } }
执行结果 :
生产美的冰箱 生产美的空调 生产格力冰箱 生产格力空调