您的位置:知识库 »

小菜编程成长记(五 体会简单工厂模式的美妙)

作者: 伍迷  发布时间: 2008-09-04 14:30  阅读: 10772 次  推荐: 0   原文链接   [收藏]  

系列文章导航:

四大发明之活字印刷——面向对象思想的胜利

小菜编程成长记(一 面试受挫——代码无错就是好?)

小菜编程成长记(二 代码规范、重构)

小菜编程成长记(三 复制VS复用)

小菜编程成长记(四 业务的封装)

小菜编程成长记(五 体会简单工厂模式的美妙)

小菜编程成长记(五 体会简单工厂模式的美妙)

小菜编程成长记(五 体会简单工厂模式的美妙)

小菜编程成长记(六 工厂不好用了?)

小菜编程成长记(七 用“策略模式”是一种好策略)

小菜编程成长记(八 反射——程序员的快乐!)

小菜编程成长记(九 会修电脑不会修收音机?——聊设计模式原则)

小菜编程成长记(十 三层架构,分层开发)

小菜编程成长记(十一 无熟人难办事?——聊设计模式迪米特法则)

小菜编程成长记(十二 有了门面,程序员的程序会更加体面!)

小菜编程成长记(十三 设计模式不能戏说!设计模式怎就不能戏说?)


 

(续上篇) 
       次日,小菜再来找大鸟,问道:“你昨天说计算器这样的小程序还可以用到面向对象三大特性?继承和多态怎么可能用得上,我实在不可理解。”
        大鸟:“小菜很有钻研精神吗?好,今天我让你功力加深一级。你先要考虑一下,你昨天写的这个代码,能否做到很灵活的可修改和扩展呢?”
        小菜:“我已经把业务和界面分离了呀,这不是很灵活了吗?”
        大鸟:“那我问你,现在如果我希望增加一个开根(sqrt)运算,你如何改?”
        小菜:“那只需要改Operation类就行了,在switch中加一个分支就行了。”
        大鸟:“问题是你要加一个平方根运算,却需要把加减乘除的运算都得来参与编译,如果你一不小心,把加法运算改成了减法,这不是大大的糟糕。打个比方,如果现在公司要求你为公司的薪资管理系统做维护,原来只有技术人员(月薪),市场销售人员(底薪+提成),经理(年薪+股份)三种运算算法,现在要增加兼职工作人员的(时薪)算法,但按照你昨天的程序写法,公司就必须要把包含有的原三种算法的运算类给你,让你修改,你如果心中小算盘一打,‘TMD,公司给我的工资这么低,我真是郁闷,这会有机会了’,于是你除了增加了兼职算法以外,在技术人员(月薪)算法中写了一句 

if (员工是小菜)
{
    salary 
= salary * 1.1;
}

那就意味着,你的月薪每月都会增加10%(小心被抓去坐牢),本来是让你加一个功能,却使得原有的运行良好的功能代码产生了变化,这个风险太大了。你明白了吗?”
        小菜:“哦,你的意思是,我应该把加减乘除等运算分离,修改其中一个不影响另外的几个,增加运算算法也不影响其它代码,是这样吗?”
        大鸟:“自己想去吧,如何用继承和多态,你应该有感觉了。”
        小菜:“OK,我马上去写。”

    /// <summary>
    
/// 运算类
    
/// </summary>

    class Operation
    
{
        
private double _numberA = 0;
        
private double _numberB = 0;
        
        
/// <summary>
        
/// 数字A
        
/// </summary>

        public double NumberA
        
{
            
getreturn _numberA; }
            
set{ _numberA = value;}
        }


        
/// <summary>
        
/// 数字B
        
/// </summary>

        public double NumberB
        
{
            
getreturn _numberB; }
            
set{ _numberB = value; }
        }


        
/// <summary>
        
/// 得到运算结果
        
/// </summary>
        
/// <returns></returns>

        public virtual double GetResult()
        
{
            
double result = 0
            
return result;
        }


       
    }

 

0
0

热门文章

    最新文章

      最新新闻

        热门新闻