设计模式之简单工厂模式

//简单工厂
//简单工厂模式
//1、技术路线所谓的简单工厂模式就是指构造出一个工厂类这个工厂的职责是根据不同的输入条件生产出不同的对象并将此对象返回给”客户”。
//之后“客户’就可以用这个被工厂加工好的成品“对象”去调用该对象的方法从而得到相对应的结果。
//2、产品描述被“工厂”加工出的“对象”产品的种类都拥有一个共同的抽象基类。也即这些对象的类都拥有共同的基类。
//同时拥有同样的重写基类 的 虚函数。
//3、生产过程这些子类的对象在工厂中通过构造函数被生产出来之后赋值便拥有了足以调用其 本类重写 虚基类 成员函数的相关参数。
//4、使用方法在客户端程序代码中只需用这些对象调用其本身的重写函数即可得出相对应的结果。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//简单工厂
//简单工厂模式 
//1、技术路线所谓的简单工厂模式就是指构造出一个工厂类这个工厂的职责是根据不同的输入条件生产出不同的对象并将此对象返回给”客户”。
//之后“客户’就可以用这个被工厂加工好的成品“对象”去调用该对象的方法从而得到相对应的结果。 
//2、产品描述被“工厂”加工出的“对象”产品的种类都拥有一个共同的抽象基类。也即这些对象的类都拥有共同的基类。
//同时拥有同样的重写基类 的 虚函数。 
//3、生产过程这些子类的对象在工厂中通过构造函数被生产出来之后赋值便拥有了足以调用其 本类重写 虚基类 成员函数的相关参数。
//4、使用方法在客户端程序代码中只需用这些对象调用其本身的重写函数即可得出相对应的结果。
namespace Simple
{
    class Program
    {
        static void Main(string[] args)
        {
            //Operation op = new OperationAdd();
            //op.NumberA = 1;
            //op.NumberB = 2;
            //Console.Write(op.GetResult().ToString());
            //Console.ReadLine();
            OperationFactory opf = new OperationFactory();
            var op = opf.CreatOperation("-");
            op.NumberA = 1;
            op.NumberB = 2;
            Console.Write(op.GetResult().ToString());
            Console.ReadLine();
        }
    }


    abstract class Operation
    {
        public double NumberA { get; set; }
        public double NumberB { get; set; }
        public abstract double GetResult();
    }
    class OperationAdd : Operation
    {
        public override double GetResult()
        {
            return NumberB + NumberA;
        }
    }
    class OperationSub : Operation
    {
        public override double GetResult()
        {
            return NumberA - NumberB;
        }
    }

    class OperationFactory
    {
        public Operation CreatOperation(string type)
        {
            Operation op = null;
            switch (type)
            {
                case "+":
                    op = new OperationAdd();
                    break;

                case "-":
                    op = new OperationSub();
                    break;
            }
            return op;
        }
    }

}

  

posted @ 2013-11-08 14:55  Balder.Yan  阅读(147)  评论(0)    收藏  举报