工厂模式与抽象工厂模式

 
工厂模式
  • 何时使用:我们明确地计划不同条件下创建不同实例时主要解决接口选择的问题。
  • 如何解决定义一个工厂接口,让工厂类实现工厂接口让调用者自己通过参数传递决定实例化创建哪一个工厂类返回的是一个抽象的工厂产品实例
  • 使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。
  • 注意事项:复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
 
调用者通过参数传递到getShape(String)决定实例化哪一个Shape
  1. publicclassShapeFactory{
  2.  
  3.    //使用 getShape 方法获取形状类型的对象
  4.    publicShape getShape(String shapeType){
  5.       if(shapeType == null){
  6.          return null;
  7.       }       
  8.       if(shapeType.equalsIgnoreCase("CIRCLE")){
  9.          returnnewCircle();
  10.       }elseif(shapeType.equalsIgnoreCase("RECTANGLE")){
  11.          returnnewRectangle();
  12.       }elseif(shapeType.equalsIgnoreCase("SQUARE")){
  13.          returnnewSquare();
  14.       }
  15.       return null;
  16.    }
  17. }
 
 
 
抽象工厂模式
  • 何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品;要集成这些产品族主要解决接口选择的问题。
  • 如何解决:定义一个抽象总工厂,含有不同的产品族的生产接口;不同产品族工厂通过继承方式只对自己的生产接口进行工厂生产细节实现(工厂模式)。调用者通过参数传递获取某一的产品族工厂,进而获取该工厂生产的产品。
  • 优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
  • 缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
 
原文地址:https://www.cnblogs.com/Doing-what-I-love/p/5621190.html