工厂方法模式(Factory Method Pattern)
程序员文章站
2022-06-15 11:53:47
...
水果店开业在即,小明需要去进货,考虑到水果的种类和成本问题决定先去探访一下货源和价格,小明发现苹果在A商那边便宜2毛,西瓜在Z商那边便宜3毛,榴莲在C商那边便宜4毛。这里每一个商贩是一个工厂,每个工厂提供不同的水果,下面我们来介绍工厂方法模式
工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,但是让子类决定哪一个类实例化,工厂方法模式让一个类的实例化延迟到其子类。
工厂方法模式是一个创建型模式,下面我们来看看他的结构图:
工厂方法的实现:
Product(抽象产品):定义产品的接口,是所有产品对象的公共父类
interface Product
{
void TestMethod();
}
Concrete Product(具体产品):实现抽象产品的具体产品
class ConcreteProduct : Product
{
public void TestMethod()
{
Console.WriteLine("Hello World!");
}
}
Factory(抽象工厂):定义工厂的接口,它是工厂方法的核心所有的工厂都必须实现抽象工厂,并且返回产品
interface Factory
{
Product FactoryMethod();
}
Concrete Factory(具体工厂):实现抽象工厂的具体工厂
class ConcreteFactory : Factory
{
public Product FactoryMethod()
{
return new ConcreteProduct();
}
}
具体调用实现:
Factory factory = new ConcreteFactory();
Product product = factory.FactoryMethod();
product.TestMethod();
工厂方法的优点:
1.工厂方法用来创建客户所需的产品,同时还向客户隐藏了具体产品实例化的细节
2.扩展性好符合开闭原则,新增一个具体产品或者具体工厂无需修改代码,只需要添加到工厂即可
工厂方法的缺点:
1.每添加一种产品需要提供对应的工厂类,系统中的类成对增加,系统在编译的时候会增加额外的开销
2.增加了系统的抽象性和理解难度
适用环境
1.客户端不知道它所需的对象的类
2.抽象工厂类通过其子类制定创建哪个对象