• 工厂模式与抽象工厂模式


     
    工厂模式
    • 何时使用:我们明确地计划不同条件下创建不同实例时主要解决接口选择的问题。
    • 如何解决定义一个工厂接口,让工厂类实现工厂接口让调用者自己通过参数传递决定实例化创建哪一个工厂类返回的是一个抽象的工厂产品实例
    • 使用场景: 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 里加代码,又要在具体的里面加代码。
     
  • 相关阅读:
    hdu 4033Regular Polygon(二分+余弦定理)
    hdu 4405Aeroplane chess(概率DP)
    hdu 3853LOOPS (概率DP)
    网络编程基础(转)
    网络编程socket基本API详解(转)
    网络编程之socket(转)
    cf(#div1 B. Dreamoon and Sets)(数论)
    cf(#div1 A. Dreamoon and Sums)(数论)
    hdu 1805Expressions(二叉树构造的后缀表达式)
    hdu1710(Binary Tree Traversals)(二叉树遍历)
  • 原文地址:https://www.cnblogs.com/Doing-what-I-love/p/5621190.html
Copyright © 2020-2023  润新知