在简单工厂模式的基础上进一步的抽象化 具备更多的可扩展和复用性,增强代码的可读性 使添加产品不需要修改原来的代码,满足开闭原则  
 
符合单一职责 ,每个工厂只负责生产对应的产品 符合开闭原则 ,添加产品只需添加对应的产品类和工厂类 使用者只需要知道产品抽象类,不需要关心其它实现类。满足迪米特法则 、依赖倒置原则 和里氏替换原则  添加一个产品,需要实现对应的工厂类和产品类 每个产品需要有对应的产品类和工厂类 
public  interface  Pay  { void  unifiedorder ( ) ; 
} 
public  interface  IFactory  { Pay  getPay ( ) ; 
} public  class  AliPay  implements  Pay { @Override public  void  unifiedorder ( )  { System . out. println ( "支付宝 支付统一下单" ) ; } 
} 
public  class  WechatPay  implements  Pay { @Override public  void  unifiedorder ( )  { System . out. println ( "微信 支付统一下单" ) ; } 
} 
public  class  AliFactory  implements  IFactory { @Override public  Pay  getPay ( ) { return  new  AliPay ( ) ; } 
} 
public  class  WechatFactory  implements  IFactory { @Override public  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 ( ) ; } 
}