首页 > 其他 > 详细

设计模式:工厂方法模式

时间:2014-02-11 17:12:20      阅读:394      评论:0      收藏:0      [点我收藏+]

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

结构图

bubuko.com,布布扣

示例

bubuko.com,布布扣

HTML代码:

bubuko.com,布布扣
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox runat="server" ID="txtNumberA"></asp:TextBox>
        <asp:DropDownList runat="server" ID="ddlType">
            <asp:ListItem Selected="True">+</asp:ListItem>
            <asp:ListItem>-</asp:ListItem>
            <asp:ListItem>*</asp:ListItem>
            <asp:ListItem>/</asp:ListItem>
        </asp:DropDownList>
        <asp:TextBox runat="server" ID="txtNumberB"></asp:TextBox>
        =
        <asp:TextBox runat="server" ID="txtResult"></asp:TextBox>
        <asp:Button runat="server" ID="btnCalculate" Text="计算" OnClick="btnCalculate_Click" />
        <asp:Label runat="server" ID="lblMsg"></asp:Label>
    </div>
    </form>
</body>
</html>
View Code

IFactory.cs:
 interface IFactory
    {
        Operation CreateOpertion();
    }

AddFactory.cs:

 public class AddFactory : IFactory
    {
        public Operation CreateOpertion()
        {
            return new OperateAdd();
        }
    }

SubFactory.cs:

 public class SubFactory : IFactory
    {
        public Operation CreateOpertion()
        {
            return new OperateSub();
        }
    }

MulFactory.cs:

 public class MulFactory : IFactory
    {
        public Operation CreateOpertion()
        {
            return new OperateMul();
        }
    }

DivFactory.cs:

 public class DivFactory : IFactory
    {
        public Operation CreateOpertion()
        {
            return new OperateDiv();
        }
    }

Operation.cs:

bubuko.com,布布扣
 public class Operation
    {
        public int NumberA { get; set; }

        public int NumberB { get; set; }

        public virtual int GetResult()
        {
            return 0;
        }
    }
View Code

OperateAdd.cs:

bubuko.com,布布扣
 public class OperateAdd : Operation
    {
        public override int GetResult()
        {
            return NumberA + NumberB;
        }
    }
View Code

OperateSub.cs:

bubuko.com,布布扣
public class OperateSub : Operation
    {
        public override int GetResult()
        {
            return NumberA - NumberB;
        }
    }
View Code

OperateMul.cs:

bubuko.com,布布扣
 public class OperateMul : Operation
    {
        public override int GetResult()
        {
            return NumberA * NumberB;
        }
    }
View Code

OperateDiv.cs:

bubuko.com,布布扣
 public class OperateDiv : Operation
    {
        public override int GetResult()
        {
            int result = 0;

            if (NumberB == 0)
                throw new Exception("被除数为0!");

            result = NumberA / NumberB;

            return result;
        }
    }
View Code

客户端代码

bubuko.com,布布扣
  protected void btnCalculate_Click(object sender, EventArgs e)
        {
            IFactory factory = null;

            string type = ddlType.SelectedValue;
            switch (type)
            {
                case "+":
                    factory = new AddFactory();
                    break;
                case "-":
                    factory = new SubFactory();
                    break;
                case "*":
                    factory = new MulFactory();
                    break;
                case "/":
                    factory = new DivFactory();
                    break;
            }

            try
            {
                Operation operation = factory.CreateOpertion();
                operation.NumberA = Convert.ToInt32(txtNumberA.Text);
                operation.NumberB = Convert.ToInt32(txtNumberB.Text);

                txtResult.Text = operation.GetResult().ToString();
            }
            catch (Exception ex)
            {

                lblMsg.Text = ex.Message;
            }


        }
View Code

简单工厂模式和工厂方法模式比较

简单工厂模式:最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相应的类,对于客户端来说,

                    去除了与具体产品的依赖。(违反了开放-关闭原则

工厂方法模式:客户端决定实例化哪个工厂来实例化具体的类。

设计模式:工厂方法模式

原文:http://www.cnblogs.com/qianxingdewoniu/p/3544046.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!