工厂模式学习总结

目录

 

工厂模式

引言

定义

工厂模式结构图

实例

实例描述

代码实现

工厂模式扩展

静态工厂方法(简单工厂模式)

总结

模式优点

模式缺点


工厂模式

 

引言

在面向对象的编程中,创建一个对象(实例化)主要使用new关键字,工厂模式将类的使用和创建解耦。用户要使用一个类的时候,无需关心该类的具体创建过程,甚至无需知道该类类名,只需要通过工厂类返回需要的实例。就好比我们想吃香蕉,不需要知道香蕉是怎么产生的,不需要我们自己动手种树收获,只需要去水果店买就行(我们可能根本不知道水果店的香蕉是怎么来的)。

定义

英文定义:"Define an interface for creating an object. but let subclasses decide which class to instantiate.Factory Method let a class defer instantiation to subclass."。

在工厂模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,将产品类的实例化操作延迟到工厂子类中去完成。

                                  工厂模式重要等级★★★★★          工厂模式难度等级★★☆☆☆

工厂模式结构图

工厂模式包含以下角色

1.Factory (抽象产品类)

2.ConcreteFactory (具体产品)

3. Product (抽象产品)

4. ConcreteProduct (具体产品)

实例

实例描述

使用工厂模式创建不同品牌的手机,该实例类图如下:

 

代码实现

1.Phone 抽象手机类,设计为接口,定义了Play方法。

interface Phone
{
    void Play();
}

2.PhoneFactory 手机工厂类,定义工厂方法返回抽象手机

interface PhoneFactory
{
    Phone CreatePhone();
}

3.IPhoneX HUAWEI具体手机,实现Phone接口

class IphoneX : Phone
{
    public void Play()
    {
        Console.WriteLine("This is IphoneX");
    }
}
class HUAWEI : Phone
{
    public void Play()
    {
        Console.WriteLine("This is HUAWEI.");
    }
}

 4.具体工厂类,实现PhoneFactory接口,返回具体的手机

class IphoneFactory : PhoneFactory
{
    public Phone CreatePhone()
    {
        return new IphoneX();
    }
}
class HUAWEIFactory : PhoneFactory
{
    public Phone CreatePhone()
    {
        return new HUAWEI();
    }
}

5.测试类,只需要面向Phone和PhoneFactory接口编程。

class Program
{
    static void Main(string[] args)
    {
        PhoneFactory factory;
        Phone phone;

        //使用苹果工厂生产苹果手机
        factory = new IphoneFactory();
        phone = factory.CreatePhone();
        phone.Play();
        //使用华为工厂生产华为手机
        factory = new HUAWEIFactory();
        phone = factory.CreatePhone();
        phone.Play();
        Console.ReadKey();
    }
}

6.运行结果

 

 

工厂模式扩展

静态工厂方法(简单工厂模式)

如果工厂等级结构中只有一个具体工厂类的话,抽象工厂就可以省略,此时,改具体工厂可以创建所有产品对象,那么改工厂的工厂方法可以定义为静态方法,此时,这种工厂模式又称为简单工厂模式。简单工厂模式类图如下。

总结

模式优点

1.在工厂模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪些具体产品将被实例化这一细节,用户只需关系所需产品对应的工厂,无需关心创建细节,甚至无需知道具体产品的类名。

2.在系统中加入新的产品时无需修改原有代码,只需要增加一对工厂和产品,完全符合开闭原则。

模式缺点

1.增加新产品时候,系统中的类将会成对增加,在一定程度上增加了系统的复杂度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值