工厂模式与抽象工厂模式

 
工厂模式
  • 什么时候使用:咱们明确地计划不一样条件下建立不一样实例时主要解决接口选择的问题。
  • 如何解决定义一个工厂接口,让工厂类实现工厂接口让调用者本身经过参数传递决定实例化建立哪个工厂类返回的是一个抽象的工厂产品实例
  • 使用场景: 一、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户能够选择记录日志到什么地方。 二、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 三、设计一个链接服务器的框架,须要三个协议,"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 里加代码,又要在具体的里面加代码。
相关文章
相关标签/搜索