欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 设计模式之工厂方法模式

设计模式之工厂方法模式

2025/4/20 7:52:01 来源:https://blog.csdn.net/A2901377401/article/details/147332452  浏览:    关键词:设计模式之工厂方法模式

1. 核心思想

工厂方法模式(Factory Method Pattern)将对象的创建过程延迟到子类。具体来说,定义一个创建对象的接口(抽象工厂),但由子类决定实例化哪个具体类。这种方式解耦了对象的创建和使用,使系统更灵活、可扩展。
用大白话来说就是对象的接口就是USB接口,你要使用什么设备只要他是USB口的都可以接上去进行基本的使用。

2. 模式结构

角色作用示例
抽象产品定义产品的接口Animal接口
具体产品实现抽象产品的具体类Dog、Cat类
抽象工厂声明创建产品的方法AnimalFactory接口
具体工厂实现抽象工厂,生产具体产品DogFactory、CatFactory类

比如说抽象产品是油炸类,具体的产品就可以是炸豆腐,抽象工厂就可以是生产油炸食品,具体工厂就是生产炸豆腐工厂

3. 代码示例

PHP代码

<?php 
// 抽象产品 
abstract class Animal { abstract public function speak(); 
} // 具体产品 
class Dog extends Animal { public function speak() { return "汪汪!"; } 
} class Cat extends Animal { public function speak() { return "喵喵!"; } 
} // 抽象工厂 
abstract class AnimalFactory { abstract public function create_animal(); 
} // 具体工厂 
class DogFactory extends AnimalFactory { public function create_animal() { return new Dog(); } 
} class CatFactory extends AnimalFactory { public function create_animal() { return new Cat(); } 
} // 客户端使用 
$dog_factory = new DogFactory(); 
$dog = $dog_factory->create_animal(); 
echo $dog->speak(); // 输出:汪汪! 
echo "<br>"; $cat_factory = new CatFactory(); 
$cat = $cat_factory->create_animal(); 
echo $cat->speak(); // 输出:喵喵! 
?> 

python代码

# 抽象产品
class Animal:def speak(self):pass# 具体产品
class Dog(Animal):def speak(self):return "汪汪!"class Cat(Animal):def speak(self):return "喵喵!"# 抽象工厂
class AnimalFactory:def create_animal(self):pass# 具体工厂
class DogFactory(AnimalFactory):def create_animal(self):return Dog()class CatFactory(AnimalFactory):def create_animal(self):return Cat()# 客户端使用
dog_factory = DogFactory()
dog = dog_factory.create_animal()
print(dog.speak())  # 输出:汪汪!cat_factory = CatFactory()
cat = cat_factory.create_animal()
print(cat.speak())  # 输出:喵喵!

Java代码

// 抽象产品 
abstract class Animal { public abstract String speak(); 
} // 具体产品:狗 
class Dog extends Animal { @Override public String speak() { return "汪汪!"; } 
} // 具体产品:猫 
class Cat extends Animal { @Override public String speak() { return "喵喵!"; } 
} // 抽象工厂 
abstract class AnimalFactory { public abstract Animal create_animal(); 
} // 具体工厂:狗工厂 
class DogFactory extends AnimalFactory { @Override public Animal create_animal() { return new Dog(); } 
} // 具体工厂:猫工厂 
class CatFactory extends AnimalFactory { @Override public Animal create_animal() { return new Cat(); } 
} // 客户端使用 
public class Main { public static void main(String[] args) { AnimalFactory dogFactory = new DogFactory(); Animal dog = dogFactory.create_animal();  System.out.println(dog.speak());   // 输出:汪汪! AnimalFactory catFactory = new CatFactory(); Animal cat = catFactory.create_animal();  System.out.println(cat.speak());   // 输出:喵喵! } 
} 

4. 应用场景

需要动态扩展产品类型:例如新增一种动物(如Bird),只需添加Bird类和BirdFactory类,无需修改现有代码。
系统需要解耦:客户端只需依赖抽象接口(Animal和AnimalFactory),不关心具体实现。

5. 优缺点对比

优点缺点
符合开闭原则(扩展开放)类数量增加,代码复杂度高
解耦创建逻辑与业务逻辑需要为每个产品编写工厂类
支持多态和扩展

6. 对比简单工厂模式

简单工厂:一个工厂类集中创建所有产品(如AnimalFactory.create(“Dog”)),违反开闭原则。
工厂方法:每个产品对应一个工厂类,扩展时只需新增类,无需修改原有代码。

思维导图

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词