百搜论坛欢迎您的加入!
adimg adimg
 
昨日:篇  今日:篇   总帖:篇   会员:
博主最大Lv63   
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“     

一、抽象类和接口选择的 “陷阱” 在设计一个类时如何选择 抽象类 和 接口?

设计实现一个 GigaFactory 类, 对 GigaFactory 的拆分既不能全部是抽象类,也不能全部是抽象接口,比如产能如果定义在接口里面就是一个常量,每个 GigaFactory 工厂的产能是不同的,这样就失去了每个对象的状态信息。 那可以都定义为抽象类吗? 也不能将功能都拆分为抽象类,会导致代码难以维护,这是从代码的灵活性和复杂性考虑的。从语言特性来考虑也不合适,类是对事物的客观抽象,并不是所有的类都具有相同的行为。 可以将共同的属性使用抽象类来表达,比如状态等,而将特有的行为使用接口定义,每个不同的类实现特定的接口。 新建 Maven 项目 abstract-interface-traps,增加 entity 包,定义一个 Factory 抽象类

/**
 * 每个 Factory 最基本的属性
 */
public abstract class Factory {

    protected String address;

    protected Integer productivity;

}
复制代码

定义生产整车业务的接口类 Vehicle

/**
 * 整车业务生产,Model 3、Y、X 等
 */
public interface Vehicle {

    void produceCars();
}
复制代码

定义生产配件的接口类

/**
 * 配件业务生产,电机等
 */
public interface Autoparts {

    void makeParts();
}
复制代码

定义生产太阳能业务的接口类 Energy

/**
 * 太阳能业务
 */
public interface Energy {

    void produceSolarPanels();
}
复制代码

定义一个上海超级工厂类,继承 Factory 类,实现整车业务接口类 Vehicle

public class ShanghaiGigaFactory extends Factory implements Vehicle{

    protected String address = "Shanghai";

    protected Integer productivity = 500000;

    @Override
    public void produceCars() {

    }
}

源码附件已经打包好上传到百度云了,大家自行下载即可~

链接: https://pan.baidu.com/s/14G-bpVthImHD4eosZUNSFA?pwd=yu27 提取码: yu27 百度云链接不稳定,随时可能会失效,大家抓紧保存哈。

如果百度云链接失效了的话,请留言告诉我,我看到后会及时更新~

开源地址 码云地址: http://github.crmeb.net/u/defu

Github 地址: http://github.crmeb.net/u/defu

 1  已被阅读了1025次  楼主 2022-06-20 11:42:19
回复列表

回复:你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“

联系站长 友链申请桂ICP备19000949号-1     桂ICP备19000949号-1
您的IP:18.217.73.187,2024-04-20 04:51:10,Processed in 0.16655 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.12.9
已有0次打赏
(1) 分享
分享
取消
免责声明
1、本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !
如果觉得本文还不错请点个赞或者打赏点轻币哦~
拒绝伸手党,拿走请回复,尊重楼主,尊重你我他~

侵权删除请致信 E-Mail:207882320@qq.com