zoukankan      html  css  js  c++  java
  • Net设计模式实例之工厂方法模式( Factory Method Pattern)

    一、工厂方法模式简介(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及其具体工厂类AddFactorySubFactory

    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)的概念及其设计结构图简单地进行了描述,同样也以一个计算器的实例进行了说明,工厂方法模式较简单工厂模式,修改时关闭的,扩展时开放的,完全符合开放-封闭原则.

  • 相关阅读:
    接口实际上是定义一个规范、标准
    类必须实现接口中的方法,否则其为一抽象类
    JAVA的核心概念:接口(interface)
    子类的方法必须覆盖父类的抽象方法
    Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性
    如果将一个类设置为abstract,则此类必须被继承使用
    在JAVA中利用public static final的组合方式对常量进行标识
    final可以修饰类、属性、方法
    覆盖不适用于静态方法
    静态方法不需要有对象,可以使用类名调用
  • 原文地址:https://www.cnblogs.com/ywqu/p/1640855.html
Copyright © 2011-2022 走看看