小编博客地址:https://charpty.com
关于工厂方法模式的误会
不太在意设计模式的同事会对工厂模式有极深的误解,总会把“工厂模式”与“静态工厂方法”混为一谈,什么是静态工厂方法?看一个简单的例子:
public class SimpleClientFactory {
public static Client createClient(){
return new Client();
}
}
通过一个静态方法来创建实例,这种方式在代码中比较常见,但这并不是我们今天要说的工厂模式,它只是一个“静态工厂方法”。
个人觉得很难给模式一个语句上的定义,因为这些模式本身只是一些帮助我们养成好的代码习惯的一些建议,它们甚至算不上是一种规范。对于工厂模式,我觉得某一段定义说的是比较准确的。
父类定义了创建对象的接口,但是由子类来具体实现,工厂方法让类把实例化的动作推迟到了子类当中。
也就是说,父类知道什么时候该去创建这个对象,也知道拿到这个对象之后应该对这个对象做什么事情,但是不知道如何去创建这个对象,对象的创建由子类来完成。
之所以有这种设计模式,也是多年业务逻辑的积累导致,大多数业务场景下,对某一类对象总是要执行相同的流程,但是并不在意这些对象之间的微小差异,这种业务场景就非常符合工厂模式的设计。公共的父类决定了怎么去处理这一类对象,而子类决定了如何创建这些有着微小差异的不同对象。
既然是工厂方法模式,那什么是“工厂方法”?举个基础的例子:
// 这是一个网页爬虫类,它利用HttpClient来获取数据并分析
public abstract class WebCrawler {
// 爬取网页数据
public WebResult getWebInfo