黄国强 2024/01/22
????????前文提到,面向对象软件开发只是两件事:
? ? ????????1 开发各种处理具体事务的对象?
? ? ????????2 开发负责创建上面事务对象的工厂对象
????????比方说,我们开发一款模拟游戏,游戏里有1万个人需要模拟,人的行为都是不同的。简单的做法是开发一万个对象来模拟这一万人的行为。如果这个游戏是模拟十个人的行为,上述做法是行的通的。但是在1万人甚至更多人的情况下,现实中这样做的游戏是不存在的,原因是任何公司根本没那么多钱招这么多程序员开发这样的程序。
????????这个问题的解决方法就是将上述各种人的行为的分类,组合这些行为形成类,用这些类创建对象。
下面举例分析并提炼出几个维度。
* 男人和女人的行为不同。我们获得性别这个维度。
* 衣食住行行为不同(比如吃饭用筷子还是叉子),我们获得种族这个维度。
* 承担的责任不同(比如战士,农民),我们获得职业这个维度
????????具体维度还是可以继续分析下去,我们这里简化按照上述三个维度来构建对象模型。
下面是两种模型,一种是用继承的方法实现的(图一),一种是用组合的方法实现的(图二 )。
????????在面向对象设计原则中,有一条原则就是组合优先于继承。显然,上述组合的方法更合理,组合的软件模型即为桥接模式。当然,也不能说第一种方法完全不对,在性能敏感场合,第一种模式结合template可以获得非常好的性能,这里不展开。
????????上述技术在半导体设备领域的一个运用就是笔者开发的麦芯设备软件中间件。在半导体设备领域有几百种不同的设备,目前各家公司都是自行开发一个自己的软件来控制自己的设备。根据上面的分析,这是成本很高的做法。而利用麦芯设备软件中间件可以减少重复开发,大幅的降低设备软件开发成本。
????????麦芯的愿景是“让每台设备运行麦芯”。