设计模式之工厂模式

                                                                          杨哥说设计模式,通俗易懂。

   软件开发中为啥需要设计模式?以下四幅画足以说明设计模式的重要性:


那么工厂模式说的是什么呢,解决了什么问题呢:

        其实工厂模式解决的是到底实例化谁,将来会不会增加实例化的对象,比如以下例子中需要增加一个开方的运算等,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂,根据条件创造出不同的实例来处理不同的业务。

源码如下:

package gongchang_designmode;


public  class FactoryMian {


public static void main(String[] args) {

// TODO 自动生成的方法存根


Operation oper;

oper=(new FactoryMian()).new OperationFactory().createOperate("+");

oper.set_numberA(1);

oper.set_numberB(2);

double result=oper.getResult();

System.out.print(result);

}

/// <summary>

    /// 运算类

    /// </summary>

    public class Operation

    {

        public double get_numberA() {

return _numberA;

}




public void set_numberA(double _numberA) {

this._numberA = _numberA;

}




public double get_numberB() {

return _numberB;

}




public void set_numberB(double _numberB) {

this._numberB = _numberB;

}




private double _numberA = 0;

        private double _numberB = 0;

        

        


        /// <summary>

        /// 得到运算结果

        /// </summary>

        /// <returns></returns>

        public  double getResult()

        {

            double result = 0; 

            return result;

        }


       

    }


    /// <summary>

    /// 加法类

    /// </summary>

    class OperationAdd extends Operation

    {

         public double getResult()

        {

            double result = 0; 

            result = get_numberA() + get_numberB();

            return result;

        }

    }


    /// <summary>

    /// 减法类

    /// </summary>

    class OperationSub extends Operation

    {

       public  double getResult()

        {

            double result = 0;

            result = get_numberA() - get_numberB();

            return result;

        }

    }


    /// <summary>

    /// 乘法类

    /// </summary>

    class OperationMul extends Operation

    {

        public  double getResult()

        {

            double result = 0;

            result = get_numberA() * get_numberB();

            return result;

        }

    }


    /// <summary>

    /// 除法类

    /// </summary>

    class OperationDiv extends Operation

    {

        public  double getResult()

        {

            double result = 0;

            if (get_numberB()==0)

try {

throw new Exception("除数不能为0。");

} catch (Exception e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

            result = get_numberA() / get_numberB();

            return result;

        }

    }



    /// <summary>

    /// 运算类工厂

    /// </summary>

    class OperationFactory

    {

        public  Operation  createOperate(String operate)

        {

            Operation oper = null;

            switch (operate)

            {

                case "+":

                    

                        oper = new OperationAdd();

                        break;

                    

                case "-":

                    

                        oper = new OperationSub();

                        break;

                    

                case "*":

                    

                        oper = new OperationMul();

                        break;

                    

                case "/":

                    

                        oper = new OperationDiv();

                        break;

                    

               

            }


            return oper;

        }

    }

}


UML类图:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值