ITPub博客

首页 > IT基础架构 > 网络安全 > 工厂方法设计模式

工厂方法设计模式

原创 网络安全 作者:Tybyq 时间:2018-11-22 18:33:34 0 删除 编辑

工厂方法模式使我们能够在不将创建逻辑暴露给客户端的情况下创建对象,并使用通用接口引用新创建的对象。 它是最广泛使用的创作模式之一。

此模式也称为   虚拟构造函数

根据  Gamma等人的 Design Patterns ,这种模式的目的   是:

  • 定义用于创建对象的接口,但让子类决定实例化哪个类。 Factory方法允许类将实例化延迟到子类。

Factory方法用于创建对象。 超类指定所有标准和通用行为,然后将创建详细信息委托给客户端提供的子类。

Factory方法使设计更具可定制性,而且更复杂一些。 其他设计模式需要新类,而Factory只需要新操作。

结构体

工厂方法模式的结构如下图所示:

工厂方法图案结构

图:工厂方法模式的结构

如今, static  类 的   方法通常用作返回所需类类型的对象的工厂方法。 与构造函数不同,它返回的实际对象可能是子类的实例,也可能重用现有对象,而不是创建新对象。

使用a  factory  代替a的一个   优点   constructor   是   factory  方法可以具有不同的和更具描述性的名称。

让我们考虑一个根据客户需求绘制不同几何形状的应用程序。 应用程序的类图如下所示:

工厂方法图案例如

图:工厂方法模式示例

所述   ShapeFactory  类具有静态方法 getShape() ,它返回   GeometricShape  字符串名称输入的基础上对象。

Java实现

我们已经介绍了上面讨论的应用程序的Java实现。

让我们首先为产品制作一个接口 factory

/ **
 *产品界面
 * /
公共 界面 GeometricShape {
    void  draw();
}


以下是上述接口的实现:

/ **
 *混凝土产品
 * /
public  class  Line  实现 GeometricShape {
    @覆盖
    public  void  draw(){
        系统。出。println(“Line Drawn。”);
    }
}
/ **
 *混凝土产品
 * /
public  class  Rectangle  实现 GeometricShape {
    @覆盖
    public  void  draw(){
        系统。出。println(“绘制矩形。”);
    }
}
/ **
 *混凝土产品
 * /
public  class  Circle  实现 GeometricShape {
    @覆盖
    public  void  draw(){
        系统。出。println(“绘制圆圈”。);
    }
}


我添加了以下枚举来命名形状:

public  enum  ShapeType {
    LINE,
    CIRCLE,
    RECTANGLE,
    三角形
}


现在,让我们创建一个   factory   提供产品的产品(在本例中   GeometricShape ):

/ **
 *混凝土产品
 * /
公共 抽象 类 ShapeFactory {
    public  static  GeometricShape  getShape(ShapeType  name){
        GeometricShape  shape  =  null ;
        开关(名字){
            案例 LINE:
                shape  =  new  Line();
                打破 ;
            案例 CIRCLE:
                shape  =  new  Circle();
                打破 ;
            案例 RECTANGLE:
                shape  =  new  Rectangle();
                打破 ;
        }
        回归 形状 ;
    }
}


应用程序的客户端提供所需形状的名称,如下所示。

/ **
 *客户
 * /
公共 类 申请 {
    public  static  void  main(String [] args){
        //请求圆形
        GeometricShape  circle  =  ShapeFactory。getShape(ShapeType。CIRCLE);
        if(circle  !=  null){
            圈子。draw();
        } else {
            系统。出。println(“此形状无法绘制。”);
        }
        //请求不存在的形状
        GeometricShape  triangle  =  ShapeFactory。getShape(ShapeType。三角);
        if(triangle  !=  null){
            三角形。draw();
        } else {
            系统。出。println(“此形状无法绘制”);
        }
    }
}


该计划的输出是:

圈 被 绘制。
这个 形状 可以“吨绘制


由于存在圆形, Circle  因此返回 有效   对象。 但是,没有带三角形的类,因此无法绘制形状。

结论

这篇文章用一个简单的例子讨论了作为GOF模式之一的Factory方法模式的总结形式。 

上面提供的所有示例的源代码都可以在 GitHub 上   找到

快乐的编码!


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557424/viewspace-2221269/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-31

  • 博文量
    206
  • 访问量
    159934