博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——工厂方法模式和抽象工厂模式
阅读量:5990 次
发布时间:2019-06-20

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

hot3.png

为什么使用工厂方法?

Duck duck=new MallardDuck();//使用接口让代码更具有弹性//但是还是建立了具体类的实例

在有一群相关类时,当场会写出这样的代码

Duck duck;if(picnic){    duck=new MallarDuck();}if(hunting){    duck=new DecoyDuck();}else if(inBathTub){    duck=new RubberDuck();}

在很多情况下,我们究竟要实例化哪个具体类,要在运行时有一些条件来决定。当看到这样的代码,一旦有变化或者扩展,就必须重新打开这段代码进行检查修改。通常这样修改过的代码将早场部分系统更难维护和更新,而且也更容易犯错。

直接使用new不符合“对修改关闭”的原则,我们应该依据“找出会变化的原则,把它们从不变的部分分离出来”的原则写代码。

解决方案:

什么是工厂方法?

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

抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定特定类。

 

原则:依赖抽象,不要依赖具体类。

目的:为了得到更松的耦合,更有弹性的设计。

 

简单的理解:

实例 -> 类 -> 类工厂

实例 -> 类 -> 类工厂 -> 抽象工厂

 

工厂方法是个方法,是在提供的抽象接口中,用来创建“一个产品”的方法。

createPizza();

然后具体子类,通过实现此接口来实现这个createPizze()的具体方法。

抽象工厂是个接口,在接口中,创建“很多产品”(或者说一个产品家族,因为产品之间有一定的联系)。

createDough();createSauce();createCheese();//多个产品,但是相互之间有联系,都是一种披萨的配料

然后具体子类,通过实现此接口来实现创建这个产品家族,而其中每一个create方法,都可以使用工厂方法来实现。

可以说抽象工厂的实现中,运用到了工厂方法。

换句话说:抽象工厂的任务是定义一个负责创建一组产品的接口,这个接口内的每一个方法都负责创建一个具体产品,同时我们利用实现抽象工厂的子类来提供这些具体的算法。所以,在抽象工厂中利用工厂方法实现生产方法是相当自然的做法。

 

转载于:https://my.oschina.net/u/3786691/blog/1808100

你可能感兴趣的文章
go 语言基础
查看>>
【原创】基于部署映像服务和管理(DISM)修改映象解决WIN7 USB3.0安装时报错
查看>>
linux杀掉80端口线程命令
查看>>
QT线程初次使用。遇到的问题。
查看>>
烦恼的高考志愿
查看>>
根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局
查看>>
查询数据库连接数
查看>>
CROSS APPLY和 OUTER APPLY 区别详解
查看>>
C# 使用Shell32 进行压缩与解压缩的标准且正确做法
查看>>
PHP如何实现页面静态化
查看>>
HDU 4371 Alice and Bob
查看>>
软测第一次lab 实验报告
查看>>
Hadoop分布式文件系统:架构和设计要点 - 转
查看>>
4.EGit基本用法
查看>>
Android FrameWork——Binder机制详解(2)
查看>>
74HC165级联
查看>>
面向对象的Shell脚本
查看>>
那一抹秋色!漂亮的秋天风景壁纸【组图】
查看>>
解密gzip压缩的网页数据流(转)
查看>>
手工建库
查看>>