创建型设计模式之工厂模式

创建型设计模式之工厂模式

工厂模式

  • 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类。
  • 比如对于一个复杂对象,内部同时包含很多子对象,这些子对象是构造函数的外部参数。
  • 一种做法是由调用者首先创建这些子对象,之后再创建这个对象;
  • 另一种做法是设计一个第三方(工厂),由工厂完成子对象和复杂对象的创建过程,之后再将复杂对象返回给调用者。
  • 这样调用者就不需要再关注对象的创建过程,实现了调用者与复杂对象之间的解耦。

具体实现:


  1. 定义一个产品接口类(也可以是一个抽象类),这个接口提供了产品的规范;
  2. 定义产品实现类,继承产品接口,实现产品规范,不同的产品定义不同的实现类;
  3. 定义一个工厂接口(也可以是一个抽象类),这个接口是调用者的入口点;
  4. 定义实现工厂接口的实现类,每个产品类都有一个对应的工厂类完成产品的实例化工作,是实现不同类型产品实例化的场所。

该内容来自 《软件工程导论》

C#语言实现:

using System;

namespace FactoryPattern
{
    #region  产品的实现


    // 定义所有产品类的产品接口
    public interface IProduct {
        void ProductMethod();
    }


    // 产品一:实现具体产品的类的定义
    public class Product1 : IProduct {
        // 实现所继承的产品接口中的方法
        public void ProductMethod() {
            Console.WriteLine("我是产品一");
        }
    }


    // 产品二:实现具体产品的类的定义
    public class Product2 : IProduct {
        // 实现所继承的产品接口中的方法
        public void ProductMethod() {
            Console.WriteLine("我是产品二");
        }
    }


    #endregion

    #region 工厂的实现


    // 定义所有工厂类的工厂接口
    public interface IFactory {
        IProduct CreateProduct();
    }


    // 工厂一:实现具体的工厂类的定义
    public class Factory1 : IFactory {
        // 实现所继承的工厂接口中的方法
        public IProduct CreateProduct() {
            // 工厂一 生产 产品一
            return new Product1();
        }
    }


    // 工厂二:实现具体的工厂类的定义
    public class Factory2 : IFactory {
        // 实现所继承的工厂接口中的方法
        public IProduct CreateProduct() {
            // 工厂二 实现 产品二
            return new Product2();
        }
    }


#endregion

    class Program
    {
        static void Main(string[] args)
        {
            // 使用IFactory的子类的对象实例化IFactory接口对象
            // 多态的应用
            IFactory factory = new Factory1();
            // 使用工厂创建产品:使用了多态
            IProduct product = factory.CreateProduct();
            // 输出产品信息
            product.ProductMethod();

            //
            factory = new Factory2();
            product = factory.CreateProduct();
            product.ProductMethod();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值