工厂方法模式(Factory Method Pattern)

水果店开业在即,小明需要去进货,考虑到水果的种类和成本问题决定先去探访一下货源和价格,小明发现苹果在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.抽象工厂类通过其子类制定创建哪个对象

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值