欢迎光临散文网 会员登陆 & 注册

设计模式--工厂模式2

2023-03-23 00:35 作者:小刘Java之路  | 我要投稿

介绍

主要解决:主要解决接口选择的问题。

如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

优点: 

1、一个调用者想创建一个对象,只要知道其名称就可以了。

2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

使用场景: 

1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

实现

1.简单工厂模式

看一个披萨的项目:要便于披萨种类的扩展,要便于维护。

  • 披萨的种类很多(比如GreekPizza、CheesePizza等);

  • 披萨的制作有prepare,bake,cut,box;

  • 完成披萨店订购功能。

image.png


传统方式的优缺点:

  • 优点是比较好理解,简单易操作;

  • 缺点是违反了设计模式的ocp原则,即对扩展开放,对修改关闭。即当我们给类增加新功能的时候,尽量不修改代码,或者尽量少修改代码;

  • 比如这时我们要新增加一个Pizza的种类(Pepper披萨),我们需要做的修改较大。

改进的思路分析:

  • 分析:修改代码可以接受,但是如果我们在其它的地方也有创建Pizza的代码,就意味着,也需要修改,而创建Pizza的代码,往往有多处;

  • 思路:把创建Pizza对象封装到一个类中,这样我们有新的Pizza种类时,只需要修改该类就可,其它有创建到Pizza对象的代码就不需要修改了(使用简单工厂模式)。

2.工厂方法模式


设计模式--工厂模式2的评论 (共 条)

分享到微博请遵守国家法律