zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式(factory pattern)

    基本定义

    工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式让实例化推迟到子类。

    模式结构

    Product :抽象产品。所有的产品必须实现这个共同的接口,这样一来,使用这些产品的类既可以引用这个接口。

    ConcreteProduct:具体产品。

    Creator:抽象工厂。它实现了所有操纵产品的方法,但不实现工厂方法。Creator所有的子类都必须要实现factoryMethod()方法。

    ConcreteCreator:具体工厂。制造产品的实际工厂。它负责创建一个或者多个具体产品。

     

    模式实现:

    Product 抽象产品类

     

    ConcreteProduct 具体产品类

     

    Factory 抽象工厂类

     

    ConcreteFactory 具体工厂类

     

    测试类

     

    执行结果

    09:46:41.447[main]INFOcom.yanyuan.gof.build.factory.v2.HuaweiPhone - 华为手机拨打貂蝉电话

    09:46:41.463[main]INFOcom.yanyuan.gof.build.factory.v2.IPhone - iPhone手机拨打小乔电话

    优缺点

    优点

    在工厂方法中,用户只需要知道所要的产品的具体工厂,无须关系具体的创建过程,甚至不需要具体产品类的名称。

    在系统增加新产品时,我们只需要增加一个具体的产品类和实现工厂,无需对原工厂进行任何修改,很好的符合了“开闭原则”

    缺点

    每次增加一个产品时,都需要增加一个具体类和对象实现工厂,系统中类的个数会成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖

    总结

    工厂方法模式完全符合“开闭原则”

    工厂方法模式使用继承,将对象委托给子类,通过子类实现工厂方法来创建对象

    在工厂方法模式中,创建者通常包含依赖于抽象的产品代码,而这些抽象产品是由子类创建的,创建者不需要知道制作哪种具体产品

     
  • 相关阅读:
    【Python大系】Python快速教程
    【Linux大系】Linux的概念与体系
    【Java大系】Java快速教程
    【夯实PHP系列】PHP正则表达式
    【PHP夯实基础系列】PHP日期,文件系统等知识点
    【夯实PHP系列】购物车代码说明PHP的匿名函数
    2016.09.21 公司裁员想到的
    使用android-junit-report.jar导出单元测试报告
    APK无源码使用Robotium简单总结
    Android环境安装简单总结
  • 原文地址:https://www.cnblogs.com/xueSpring/p/12736414.html
Copyright © 2011-2022 走看看