当前位置: 首页 > wzjs >正文

wordpress站点如何添加百度分享代码黑马程序员学费

wordpress站点如何添加百度分享代码,黑马程序员学费,我省推行制度推动山西品牌建设,建设银行网银盾不能打开网站定义: 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象,其核心思想是:要面向接口编程,不要面向实现编程。 依赖倒转原则要求我们在程序代码中传递参数时…
定义:
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象,其核心思想是:要面向接口编程,不要面向实现编程。
依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。为了确保该原则的应用,一个具体类应当只实现接口或抽象类中声明过的方法,而不要给出多余的方法,否则将无法调用到在子类中增加的新方法。
在引入抽象层后,系统将具有很好的灵活性,在程序中尽量使用抽象层进行编程,而将具体类写在配置文件中,这样一来,如果系统行为发生变化,只需要对抽象层进行扩展,并修改配置文件,而无须修改原有系统的源代码,在不修改的情况下来扩展系统的功能,满足开闭原则的要求。
在实现依赖倒转原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入(DependencyInjection, DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。
依赖倒置原则的作用
(1)依赖倒置原则可以降低类间的耦合性。
(2)依赖倒置原则可以提高系统的稳定性。
(3)依赖倒置原则可以减少并行开发引起的风险。
(4)依赖倒置原则可以提高代码的可读性和可维护性。
依赖倒置原则的实现方法
依赖倒置原则的目的是通过要面向接口的编程来降低类间的耦合性,所以我们在实际编程中只要遵循以下4点,就能在项目中满足这个规则。
(1)每个类尽量提供接口或抽象类,或者两者都具备。
(2)变量的声明类型尽量是接口或者是抽象类。
(3)任何类都不应该从具体类派生。
(4)使用继承时尽量遵循里氏替换原则
例子:
现需要将存储在TXT或Excel文件中的客户信息转存到数据库中,因此需要进行数据格式转换。在客户数据操作类中将调用数据格式转换类的方法实现格式转换和数据库插入操作,初始设计方案结构如图所示:
在编码实现图所示结构时,Sunny软件公司开发人员发现该设计方案存在一个非常严重的问题,由于每次转换数据时数据来源不一定相同,因此需要更换数据转换类,如有时候需要将TXTDataConvertor改为ExcelDataConvertor,此时,需要修改CustomerDAO的源代码,而且在引入并使用新的数据转换类时也不得不修改CustomerDAO的源代码,系统扩展性较差,违反了开闭原则,现需要对该方案进行重构。
在本实例中,由于CustomerDAO针对具体数据转换类编程,因此在增加新的数据转换类或者更换数据转换类时都不得不修改CustomerDAO的源代码。我们可以通过引入抽象数据转换类解决该问题,在引入抽象数据转换类DataConvertor之后,CustomerDAO针对抽象类DataConvertor编程,而将具体数据转换类名存储在配置文件中,符合依赖倒转原则。根据里氏代换原则,程序运行时,具体数据转换类对象将替换DataConvertor类型的对象,程序不会出现任何问题。更换具体数据转换类时无须修改源代码,只需要修改配置文件;如果需要增加新的具体数据转换类,只要将新增数据转换类作为DataConvertor的子类并修改配置文件即可,原有代码无须做任何修改,满足开闭原则。重构后的结构如图所示:
在上述重构过程中,我们使用了开闭原则、里氏代换原则和依赖倒转原则,在大多数情况下,这三个设计原则会同时出现,开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段,它们相辅相成,相互补充,目标一致,只是分析问题时所站角度不同而已。
  • 高层模块的抽象依赖:高层模块(如业务逻辑)不应直接依赖低层模块(如数据库操作),而应通过接口交互。
  • 依赖注入的实践:通过 Spring 框架的@Autowired或构造器注入实现依赖倒置,避免硬编码依赖。
案例代码:用户服务与数据层解耦
// 抽象数据访问接口(低层模块)
interface UserRepository {User findById(int id);void save(User user);
}// 具体数据库实现(MySQL)
class MysqlUserRepository implements UserRepository { /* 实现数据库操作 */ }// 高层业务模块(用户服务)依赖抽象接口
class UserService {private final UserRepository repository;// 构造器注入(依赖倒置)public UserService(UserRepository repository) {this.repository = repository;}public User getUser(int id) {return repository.findById(id); // 面向接口编程}
}// 客户端使用:通过具体实现注入
UserService service = new UserService(new MysqlUserRepository());


文章转载自:

http://PGzaAhpc.bwkhp.cn
http://q26aWy7j.bwkhp.cn
http://x3pDr737.bwkhp.cn
http://97Oy0Xkb.bwkhp.cn
http://KYPP1NHs.bwkhp.cn
http://66um1Uya.bwkhp.cn
http://qZFipXAv.bwkhp.cn
http://ocdxLPL0.bwkhp.cn
http://vHI7kD1j.bwkhp.cn
http://Jbwf8afb.bwkhp.cn
http://uSFbnG2k.bwkhp.cn
http://8Zd23OiV.bwkhp.cn
http://glkM1Z4D.bwkhp.cn
http://3V1B3kRg.bwkhp.cn
http://vTp1OJvj.bwkhp.cn
http://tWbtKHo6.bwkhp.cn
http://pWTPnGIt.bwkhp.cn
http://8hM9FxYn.bwkhp.cn
http://sSB7Jgom.bwkhp.cn
http://2KJBwr52.bwkhp.cn
http://S9u7jOHb.bwkhp.cn
http://BwRgf8uB.bwkhp.cn
http://pOilZtKo.bwkhp.cn
http://mG3wqfZU.bwkhp.cn
http://ghrZ8bES.bwkhp.cn
http://3l1zzPhK.bwkhp.cn
http://LAqXzzaL.bwkhp.cn
http://ntimwqTQ.bwkhp.cn
http://NEmy1sAD.bwkhp.cn
http://soDaLxmf.bwkhp.cn
http://www.dtcms.com/wzjs/652938.html

相关文章:

  • 长沙网站seo推广做外贸用哪些网站
  • 在线服务器网站推广宝
  • 免费行情软件网站大全入口全球域名最贵的100个域名
  • 物流管理网站建设如何刷关键词指数
  • 网站制作教程提高网站订单转化率
  • 网站后台无法上传图片微信小程序购物商城源码
  • 浏览器网站在线进入网站建设坂田
  • 阿里云突发性能适用于做网站吗网站建设协议书模板 完整版
  • 汽车专业网站南宁市网络公司地址
  • wordpress模板媒体衡水网站seo
  • 跨境电商平台有哪些上市公司成都搜狗seo
  • 网站图片上怎么做弹幕效果高端h5手机网站设计案例
  • 网站公司介绍模板网站添加音乐
  • 2016用什么网站程序做流量重庆网站公司
  • 湘潭网站优化公司网络整合营销公司
  • 可以做语文阅读题的网站网站建设济宁
  • 网站开发的预算公司一般有哪些部门
  • 网站建设网站设网站建设与网页设计ppt
  • 什么网站建设最便宜培训方案模板
  • 自动化科技产品网站建设互联网技术学校
  • html静态网站模板简单单页布吉商城网站建设哪家便宜
  • 网站图片用什么格式电商运营seo是什么
  • 网站开发怎么自学漂亮的html单页
  • 网站设计咨询电话百度指数在哪里看
  • 网站空间的地址个人简历电子版免费下载
  • 国家电网网站开发图片素材网站备案需要注意什么
  • 营销型网站改版计算机应用技术专业网站开发方向
  • 网站运营和维护网站虚拟域名
  • 建设银行自贡分行网站湖南常德文理学院
  • 可以申请做cpa广告的网站全球最大的网络公司排名