博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂方法模式
阅读量:4108 次
发布时间:2019-05-25

本文共 873 字,大约阅读时间需要 2 分钟。

工厂方法模式

1. 定义

Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory method lets a class defer instantiation to subclasses (工厂方法定义了创建对象的接口,但是让子类决定初始化哪一个类,工厂方法使得一个类将其初始化推迟到子类)

2. 分析

良好的封装性:客户不需要了解创建对象的过程,只需要将自己想要的产品的特征告诉工厂类的对象即可获得想要的产品对象;符合迪米特原则;

优秀的扩展性:在增加产品种类的情况下,只需要适当修改或者派生出新的工厂类即可,已有客户端代码几乎不受影响。屏蔽了产品类使得接口不变则系统中的上层模块就不变;
常见的如使用JDBC连接数据库,可以方便的实现从MySQL转变为Oracle;

3. 实现方法
  1. 屏蔽产品类:使用抽象的Produce类;
  2. 工厂方法:根据传入的参数(一般为产品的特征,比如名字之类的)生成对应的Product子类;
    工厂模式类图
4. 体现的
  1. 单一职责原则:使用Product的Client不应该负责Product的具体创建,所以应该将其交给对应的工厂方法;这样便各司其职,互不干扰;
  2. 里氏替换原则:隔离Product类自然要用到继承,抽象Product类和具体子类间自然需要满足里氏替换原则;
  3. 依赖倒置原则:创建对象的代码由于同具体Product打交道相当于底层模块;Client作为具体Product的使用者,相当于高层模块,他们之间不应该有直接的依赖关系;他们都应该依赖抽象:抽象的Product;
  4. 接口隔离原则,这里不涉及到;
  5. 迪米特原则:Client只需要知道Product的特征即可获得相应对象,而无需了解详细的创建过程;
  6. 开闭原则:通过隔离Product的构建过程,使得添加新的product时,对代码的影响控制于工厂方法中,从Client的角度来看,对 “扩展”的确是比较友好的;
你可能感兴趣的文章
LA 2797 Monster Trap 怪物逃脱 平面区域
查看>>
UVA 10047 骑单车
查看>>
UVA 11275 判断空间三角形是否相交
查看>>
Find a way bfs搜索 容易出错
查看>>
C - Charm Bracelet dp
查看>>
CF 551B 暴力+字符串
查看>>
CF 551c 二分搜索+思维题
查看>>
UVA 10054
查看>>
cf 550A 字符串统计
查看>>
CF 字符串+数论
查看>>
POJ 1274 The Perfect Stall 二分匹配模板
查看>>
CF Mike and Fax 字符串组成
查看>>
POJ 3250 单调栈模板
查看>>
CF #338B Longtail Hedgehog 画刺猬
查看>>
Good Bye 2015 B. 位运算
查看>>
Cf #179 (Div. 1) B. Greg and Graph 活用三重floyd
查看>>
CF #165 DIV2 E 最大流的流向
查看>>
Manthan 2011 A. Partial Teacher 拓扑排序or直接数组处理
查看>>
AVL树与红黑树比较
查看>>
排序算法比较与分析
查看>>