核心思想
 
- 在简单工厂模式的基础上进一步的抽象化
 - 具备更多的可扩展和复用性,增强代码的可读性
 - 使添加产品不需要修改原来的代码,满足开闭原则
 
 

 
优缺点
 
优点
 
- 符合单一职责,每个工厂只负责生产对应的产品
 - 符合开闭原则,添加产品只需添加对应的产品类和工厂类
 - 使用者只需要知道产品抽象类,不需要关心其它实现类。满足迪米特法则、依赖倒置原则和里氏替换原则
 
 
缺点
 
- 添加一个产品,需要实现对应的工厂类和产品类
 - 每个产品需要有对应的产品类和工厂类
 
 
代码示例
 
产品抽象接口
 
public interface Pay {void unifiedorder();
}
 
抽象工厂
 
public interface IFactory {Pay getPay();
}
 
产品具体实现类
 
public class AliPay implements Pay{@Overridepublic void unifiedorder() {System.out.println("支付宝 支付统一下单");}
}
 
public class WechatPay implements Pay{@Overridepublic void unifiedorder() {System.out.println("微信 支付统一下单");}
}
 
工厂具体实现类
 
public class AliFactory implements IFactory{@Overridepublic Pay getPay(){return new AliPay();}
}
 
public class WechatFactory implements IFactory{@Overridepublic Pay getPay(){return new WechatPay();}
}
 
测试
 
public class AppRun {public static void main(String[] args) {IFactory iFactory = new AliFactory();Pay pay = iFactory.getPay();pay.unifiedorder();}
}
 

 
public class AppRun {public static void main(String[] args) {IFactory iFactory = new WechatFactory();Pay pay = iFactory.getPay();pay.unifiedorder();}
}
 
