工厂方法模式

一、工厂方法模式简介(Brief Introduction

工厂方法模式( Factory Method Pattern ),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类中。

二、解决的问题(What To Solve

       工厂方法模式较简单工厂模式,修改时关闭的,扩展时开放的,完全符合开放 - 封闭原则。工厂方法使一个类的实例化延迟到其子类中。

三、工厂方法模式分析(Analysis

1、工厂方法模式结构

Product 抽象类 ,定义工厂方法所创建的对象接口。
ConcreteProduct 实现类 ,具体的产品,实现 Product 接口。
Factory 抽象类 ,声明工厂方法,该方法返回一个 Product 类型的对象。
ConcreteFactory ,抽象工厂类 Factory 的具体实现,返回一个 ConcreteProduct 实例

四.实例分析(Example

1、场景

一个简单计算器,具有简单的加操作和减操作。 结构 如下图所示
 
Factory: 抽象工厂方法类 .
AddFactory: 加法工厂
SubFactory, 减法工厂 .
Operation: 抽象操作类
AddOperation: 加法操作
SubOperation: 减法操作

2、代码

1 抽象操作类 Operation 及其具体实现类AddOperationSubOperation
/// <summary>
/// 抽象操作类
/// </summary>
public abstract class Operation
{
    public int numberA;
    public int numberB;
    public abstract int GetResult();
}
/// <summary>
/// 加法操作
/// </summary>
public class AddOperation : Operation
{
    public override int GetResult()
    {
       return (this .numberA + this .numberB);
    }
}
/// <summary>
/// 减法操作
/// </summary>
public class SubOperation : Operation
{
    public override int GetResult()
    {
        return (this .numberA - this .numberB);
    }
}
 
2 、抽象工厂类 Factory 及其具体工厂类 AddFactory SubFactory
public abstract class Factory
{
    public abstract Operation CreateOperation();
}
 
public class AddFactory : Factory
{
    public override Operation CreateOperation()
    {
        return new AddOperation ();
    }
}
 
public class SubFactory :Factory
{
    public override Operation CreateOperation()
    {
        return new SubOperation ();
    }
}
 
3 、客户端代码
static void Main (string [] args)
{
    Console .WriteLine(" 使用工厂方法进行计算" );
    Factory factory1 = new AddFactory ();
    Operation operation1= factory1.CreateOperation();
    operation1.numberA = 10;
    operation1.numberB = 20;
    Console .WriteLine("{0}+{1}={2}" , operation1.numberA, operation1.numberB, operation1.GetResult());
 
    Factory factory2 = new SubFactory ();
    Operation operation2 = factory2.CreateOperation();
    operation2.numberA = 10;
    operation2.numberB = 20;
    Console .WriteLine("{0}+{1}={2}" , operation2.numberA, operation2.numberB, operation2.GetResult());
    Console .Read();
}

3、实例运行结果

五、总结(Summary

本文对工厂方法模式( Factory Method Pattern )的概念及其设计结构图简单地进行了描述,同样也以一个计算器的实例进行了说明 , 工厂方法模式较简单工厂模式,修改时关闭的,扩展时开放的,完全符合开放 - 封闭原则 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值