设计模式之工厂方法模式

    简单工厂模式虽然简单,但是存在一个问题:当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背开闭原则。在工厂方法模式中,不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,系统提供一个与产品等级结构对于的工厂等级结构。

    工厂方法模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到子类。工厂方法模式提供一个抽象工厂接口来声明抽象工厂方法,而由其子类来具体实现工厂方法,创建具体的产品对象。

 

 

 

 

 

 

 

 

1. Product(抽象产品):它是定义产品的接口,是产品对象的公共父类。

2. ConcreteProduct(具体产品):它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂与具体产品之间一一对应。

3. Factory(抽象工厂):在抽象工厂类中,声明了工厂方法(FactoryMethod),拥有返回一个产品。抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口。

4. ConcreteFactory(具体工厂):它是抽象工厂类的子类,实现了抽象工厂中定义的工厂方法,并可由客户端调用,返回一个具体产品类的实例。

   与简单工厂模式相比,工厂方法模式最重要的区别是引入了抽象工厂角色。抽象工厂可以是接口,也可以是抽象类或者具体类。

   在实际使用时,具体工厂类在实现工厂方法时除了创建具体产品对象之外,还可以负责产品对象的初始化工作以及一些资源和环境配置工作,例如连接数据库、创建文件等。

      在客户端代码中,只需关心工厂类即可。不同的具体工厂可以创建不同的产品,典型的客户端类代码如下:

 示例:

 

 

 

posted @ 2024-08-24 15:03  LXLR  阅读(2)  评论(0编辑  收藏  举报