陈旧语法密度之八——使用多态消灭if-else if-else

本文探讨如何通过多态性来消除if-else if-else语句,以提高代码的可读性和可维护性。以Java和C#为例,介绍如何利用虚函数和接口实现这一目标。通过实例展示了在地图显示系统中,如何利用多态减少代码复杂性,并对比了基类与接口的不同应用场景。
摘要由CSDN通过智能技术生成

用多态消灭if – else if - else

如果说泛型消灭行为相同、类型不同的分支语句,多态则消灭(父)类型相同、行为不同的分支语句。

我在1999年曾经写国庆阅兵的直升飞机编队指挥系统,其地面的核心是一个地图显示系统。地图的显示代码大致如下:

 
public class PlaneMap {
    List<MapItem> items = new ArrayList<>();

    public void show() {
        for (MapItem item : items) {
            if (item.type == MapItem.Types.City) {
                MapItemCity theCity = (MapItemCity) item;
                //.... Draw the city icon.
            } else if (item.type == MapItem.Types.Road) {
                MapI
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
使用对象的形式可以优化if-else语句,可以使用以下两种方法: 1. 使用多态 可以使用多态来优化if-else语句。假设有一组类A、B、C,它们都有一个方法doSomething(),而且根据具体的类型,doSomething()的行为不同。可以定义一个基类Base,然后在Base中定义doSomething()方法,让每个类都继承Base,并实现自己的doSomething()方法。这样就可以通过调用对象的方法来执行不同的操作,而不必使用if-else语句来判断对象的类型。 例如: ``` class Base: def doSomething(self): pass class A(Base): def doSomething(self): print("Do something for A") class B(Base): def doSomething(self): print("Do something for B") class C(Base): def doSomething(self): print("Do something for C") # 使用多态 objects = [A(), B(), C()] for obj in objects: obj.doSomething() ``` 这样就可以通过调用对象的doSomething()方法,执行不同的操作,而不必使用if-else语句。 2. 使用字典 另一种方法是使用字典来实现。假设有一个需要根据不同的输入参数执行不同操作的函数,可以使用字典来将输入参数与对应的函数关联起来。这样就不必使用if-else语句来判断输入参数的类型。 例如: ``` def doSomethingA(): print("Do something for A") def doSomethingB(): print("Do something for B") def doSomethingC(): print("Do something for C") # 使用字典 actions = { "A": doSomethingA, "B": doSomethingB, "C": doSomethingC } # 调用函数 action = "A" actions[action]() ``` 这样就可以使用字典来将输入参数与对应的函数关联起来,而不必使用if-else语句来判断输入参数的类型。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值