闲聊设计模式7-instanceof的替代方案

个人感觉instanceof其实是面向过程的...

interface People{
}
class Student implements People{
}
class Teacher implements People{
}

/**
 * 场景
 */
class Scene{
    //下课
    classOver(People people){
        if(people instanceof Student){
            System.out.println("去操场...")
        }else if(people instanceof Teacher){
            System.out.println("去办公室...")
        }
    }
}

以上代码非常简单,看起来没有什么问题,表达的意思就是下课了,学生去操场,老师去教室。但是仔细想一想像是有一个人在指挥,不同的对象做不同的响应。注意了,重点不在响应,而是在指挥。这与我们的面向对象好想有点矛盾。

面向对象,强调对象自身具备自己的响应方式。说白了就是我不需要你告诉我怎么做,我知道我该怎么做!!!(其实就是由被动转化为主动的过程,额外说一句,学习其实也是这样,从小学到大学,大部分人都是被动了十几年,很少主动过。进入社会后才意识到,主动学习变得越来越重要)

所以,就下课场景而言,应该由老师,同学自己去响应,而不是有人去指挥。修改如下:

interface People{
    classOver();
}
class Student implements People{
    classOver(){
        System.out.println("去操场...")
    }
}
class Teacher implements People{
    classOver(){
        System.out.println("去办公室...")
    }
}

/**
 * 场景
 */
class Scene{
    //下课
    classOver(People people){
        /**
         * People只是一个引用,其指向的对象(可能是Teacher,可能是Student),会做出响应。
         */
        people.classOver();
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值