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

淘宝客网站建站建设网站建设哪家快

淘宝客网站建站,建设网站建设哪家快,注册了一个域名怎么做网站,郑州小程序开发报价03.开闭原则详细介绍 目录介绍 01.问题思考的分析02.如何理解开闭原则03.开闭原则的背景04.开闭原则比较难学05.实现开闭原则方式06.画图形案例分析07.银行业务案例分析08.开闭原则优缺点09.开闭原则的总结 推荐一个好玩网站 一个最纯粹的技术分享网站#xff0c;打造精品…03.开闭原则详细介绍 目录介绍 01.问题思考的分析02.如何理解开闭原则03.开闭原则的背景04.开闭原则比较难学05.实现开闭原则方式06.画图形案例分析07.银行业务案例分析08.开闭原则优缺点09.开闭原则的总结 推荐一个好玩网站 一个最纯粹的技术分享网站打造精品技术编程专栏编程进阶网 https://yccoding.com/ 设计模式Git项目地址https://github.com/yangchong211/YCDesignBlog 单一职责原则SRP是面向对象设计的重要原则强调一个类或模块应仅负责完成一个特定的职责或功能。通过将复杂的功能分解为多个粒度小、功能单一的类可以提高系统的灵活性、可维护性和可扩展性。 本文详细介绍了如何理解单一职责原则包括方法、接口和类层面的应用并通过具体例子解释了其优势和判断标准。此外还探讨了在实际开发中如何平衡类的设计避免过度拆分导致的复杂性增加。 01.问题思考的分析 什么叫作开闭原则他的主要用途是什么如何做到拓展开放修改封闭这一准则结合案例说一下如何实现你平常是如何理解开闭原则的判断的标准是什么 02.如何理解开闭原则 开闭原则的英文全称是 Open Closed Principle简写为 OCP。它的英文描述是software entities (modules classes functions etc.) should be open for extension but closed for modification。 我们把它翻译成中文就是软件实体模块、类、方法等应该“对扩展开放、对修改关闭”。 这个描述比较简略如果我们详细表述一下那就是添加一个新的功能应该是在已有代码基础上扩展代码新增模块、类、方法等而非修改已有代码修改模块、类、方法等。 03.开闭原则的背景 在软件的生命周期内因为变化、升级和维护等原因需要对软件原有代码进行修改时可能会将错误引入原本已经经过测试的旧代码中破坏原有系统。 因此当软件需要变化时我们应该尽量通过扩展的方式来实现变化而不是通过修改已有的代码来实现。 当然在现实开发中只通过继承的方式来升级、维护原有系统只是一个理想化的愿景因此在实际的开发过程中修改原有代码、扩展代码往往是同时存在的。 软件开发过程中最不会变化的就是变化本身。产品需要不断地升级、维护没有一个产品从第一版本开发完就再没有变化了除非在下个版本诞生之前它已经被终止。 产品需要升级修改原来的代码就可能会引发其他的问题。那么如何确保原有软件模块的正确性以及尽量少地影响原有模块答案就是尽量遵守本章要讲述的开闭原则。 04.开闭原则比较难学 个人觉得开闭原则是 SOLID 中最难理解、最难掌握同时也是最有用的一条原则。 之所以说这条原则难理解那是因为“怎样的代码改动才被定义为‘扩展’怎样的代码改动才被定义为‘修改’怎么才算满足或违反‘开闭原则’修改代码就一定意味着违反‘开闭原则’吗”等等这些问题都比较难理解。 之所以说这条原则难掌握那是因为“如何做到‘对扩展开放、修改关闭’如何在项目中灵活地应用‘开闭原则’以避免在追求扩展性的同时影响到代码的可读性”等等这些问题都比较难掌握。 之所以说这条原则最有用那是因为扩展性是代码质量最重要的衡量标准之一。在 23 种经典设计模式中大部分设计模式都是为了解决代码的扩展性问题而存在的主要遵从的设计原则就是开闭原则。 05.实现开闭原则方式 为了实现开闭原则常用的设计技术有以下几种 抽象类和接口通过定义抽象类和接口来约定行为然后通过继承和实现这些抽象类和接口来扩展功能。策略模式将算法的实现分离到不同的类中通过组合方式来实现不同的行为。装饰器模式通过对对象进行包装动态地添加新的行为或功能。 06.画图形案例分析 6.1 普通案例实现 假设有一个图形绘制程序程序需要能够绘制不同形状的图形比如矩形、圆形和三角形。最初的设计可能会像这样 public class GraphicEditor {public void draw(Shape shape) {if (shape.m_type 1) {drawRectangle();} else if(shape.m_type 2) {drawCircle();}}public void drawRectangle() {System.out.println(画长方形);}public void drawCircle() {System.out.println(画圆形);}class Shape {int m_type;}class Rectangle extends Shape {Rectangle() {super.m_type1;}}class Circle extends Shape {Circle() {super.m_type2;}} }我们来看看这个代码初看是符合要求了再想想要是我增加一种形状呢? 比如增加三角形. 首先要增加一个三角形的类 继承自Shape第二要增加一个画三角形的方法drawTriage()第三在draw方法中增加一种类型type3的处理方案 在这个设计中每当我们需要添加新的图形类型就需要修改 GraphicEditor 类添加新的 if 条件。我们需要修改已有的代码来实现新功能。 这就违背了开闭原则-对扩展开发对修改关闭。增加一个类型修改了三处代码。 6.2 开闭原则演变 为了符合开闭原则我们可以进行重构。首先我们定义一个抽象类Shape public class GraphicEditor {public void draw(Shape shape) {shape.draw();}interface Shape {void draw();}class Rectangle implements Shape {Overridepublic void draw() {System.out.println(画矩形);}}class Circle implements Shape {Overridepublic void draw() {System.out.println(画圆形);}}}各种类型的形状自己规范自己的行为 而GraphicEditor.draw()只负责画出来. 当增加一种类型三角形. 只需要 第一增加一个三角形的类实现Shape接口第二调用draw方法划出来就可以了 整个过程都是在扩展而没有修改原来的类。这个设计是符合开闭原则的。 6.3 使用例子分析 让我们来看一个具体的使用例子展示如何遵循开闭原则来进行扩展。 public class Main {public static void main(String[] args) {Shape circle new Circle();Shape rectangle new Rectangle();GraphicEditor editor new GraphicEditor();editor.drawShape(circle);editor.drawShape(rectangle);} }在这个例子中我们创建了一个圆形对象和一个矩形对象并通过 GraphicEditor 类来绘制它们。当我们需要添加新的图形类型例如三角形时只需创建一个新的类实现 Shape 接口而不需要修改现有的代码 // 三角形类 public class Triangle implements Shape {Overridepublic void draw() {// 绘制三角形的代码} }// 使用新的三角形类 public class Main {public static void main(String[] args) {Shape circle new Circle();Shape rectangle new Rectangle();Shape triangle new Triangle();GraphicEditor editor new GraphicEditor();editor.drawShape(circle);editor.drawShape(rectangle);editor.drawShape(triangle);} }通过这种方式我们可以在不修改 GraphicEditor 类的情况下轻松地扩展新的图形类型真正实现了对扩展开放对修改关闭的设计原则。 07.银行业务案例分析 7.1 业务基础实现 比如现在有一个银行业务存钱取钱和转账。最初我们会怎么思考呢? 首先有一个银行业务类 用来处理银行的业务银行有哪些业务呢? 存钱取钱转账 这都是银行要执行的操作那外部说我要存钱 我要取钱我要转账 通过一个类型来告诉我们 public class BankBusiness {public void operate(int type) {if (type 1) {save();} else if(type 2) {take();} else if(type 3) {transfer();}}public void save(){System.out.println(存钱);}public void take(){System.out.println(取钱);}public void transfer() {System.out.println(转账);} }咋一看已经实现了需求. 但是现在有新的需求来了 银行要增加功能—理财. 理财是银行业务的一种 自然是新增一个方法. 然后在operate()方法里增加一种类型. 这就是一个糟糕的设计 增加新功能 但是却修改了原来的代码 7.2 开闭原则演变 设计成接口抽象的形式利用开关原则可以尝试改造为下面的代码。将不同对象分类的服务方法进行抽象把业务逻辑的紧耦合关系拆开实现代码的隔离保证了方便的扩展。 public interface Business {public void operate(); }public class Save implements Business {Overridepublic void operate() {System.out.println(存钱业务);} }public class Take implements Business {Overridepublic void operate() {System.out.println(取钱业务);} }public class Transfer implements Business {Overridepublic void operate() {System.out.println(转账业务);} }public class BankBusinesses {/*** 处理银行业务* param business*/public void operate(Business business) {System.out.println(处理银行业务);business.operate();} }通过接口抽象的形式方便扩展 加入要新增理财功能. 只需新增一个理财类 其他业务代码都不需要修改. 其实 在日常工作中 经常会遇到这种情况. 因为我们平时写业务逻辑会更多一些 而业务就像流水账 今天一个明天一个一点一点的增加. 所以当业务增加到3个的时候 我们就要思考 如何写能够方便扩展 08.开闭原则优缺点 8.1 开闭原则的优点 提高了代码的可维护性与复用性遵循开闭原则可以让代码更加稳定和可维护同时也使得代码更容易被复用。如果我们需要修改某个模块的行为只需要扩展该模块而不需要直接修改源代码这样就不会影响到其他的模块。提高了代码的可扩展性开闭原则还可以提高代码的可扩展性。通过扩展已有的代码我们可以很容易地添加新的功能或改进现有功能从而适应业务需求的更改。提高了代码的可测试性遵循开闭原则可以降低代码的耦合度使得测试更加容易。因为我们只需要测试新增的代码而不必验证已有代码的正确性。 8.2 开闭原则的缺点 对代码的设计要求高遵循开闭原则需要对代码进行良好的抽象和封装这对程序员的设计能力和经验要求较高。如果设计不好可能会导致代码过于复杂难以维护。可能会增加代码量通过扩展已有的代码来实现新功能可能会增加代码量使得系统变得更加复杂。这需要我们在平衡可维护性和代码量之间做出权衡。可能会带来设计上的限制在某些情况下为了遵循开闭原则我们可能需要引入更多的抽象层或接口。这可能会带来一定的设计上的限制限制了代码的表达能力和灵活性。 09.开闭原则的总结 9.1 理解开闭原则 如何理解“对扩展开放、对修改关闭” 添加一个新的功能应该是通过在已有代码基础上扩展代码新增模块、类、方法、属性等而非修改已有代码修改模块、类、方法、属性等的方式来完成。 关于定义我们有两点要注意。 第一点是开闭原则并不是说完全杜绝修改而是以最小的修改代码的代价来完成新功能的开发。第二点是同样的代码改动在粗代码粒度下可能被认定为“修改”在细代码粒度下可能又被认定为“扩展”。 9.2 如何做到开闭原则 如何做到“对扩展开放、修改关闭” 我们要时刻具备扩展意识、抽象意识、封装意识。在写代码的时候我们要多花点时间思考一下这段代码未来可能有哪些需求变更如何设计代码结构事先留好扩展点以便在未来需求变更的时候在不改动代码整体结构、做到最小代码改动的情况下将新的代码灵活地插入到扩展点上。 学习设计原则要多问个为什么。 不能把设计原则当真理而是要理解设计原则背后的思想。搞清楚这个比单纯理解原则讲的是啥更能让你灵活应用原则。 9.3 开闭原则的总结 问题思考开闭原则的主要用途是什么如何才能做到对外拓展开放对内修改关闭你平常是如何理解开闭原则的判断的标准是什么如何理解开闭原则软件实体模块、类、方法等应该“对扩展开放、对修改关闭”。为何开闭原则比较难学怎样的代码改动才被定义为‘修改’怎么才算满足或违反‘开闭原则’如何理解大部分设计模式都是遵循开闭原则开笔原则的背景软件/业务迭代升级中面对代码变化修改原来代码可能引入原有模块bug风险因此尽量通过对外拓展来实现功能迭代。实现开闭原则的方式常用的设计技术有以下几种1.抽象类和接口2.策略模式3.装饰器模式等。开闭原则的案例教学绘制圆形/矩形通过if-else来执行不同case逻辑新增一种类型则需要修改原逻辑。因此考虑通过接口抽象类方式实现友好拓展。开闭原则的优点1.提高代码拓展性和可维护性2.提高代码可测试的粒度3.降低的代码耦合度。开闭原则的缺点1.对代码设计要求高2.可能会导致代码量增大和变得复杂3.可能会带来设计上的限制。总结如何理解开闭原则当需求发生变化时我们应该通过添加新的代码来扩展功能而不是修改已有的代码。总结如何运用开闭原则通过封装变化、使用抽象化、利用扩展点和遵循依赖倒置原则来实现。 10.更多内容推荐 模块描述备注GitHub多个YC系列开源项目包含Android组件库以及多个案例GitHub博客汇总汇聚JavaAndroidC/C网络协议算法编程总结等YCBlogs设计模式六大设计原则23种设计模式设计模式案例面向对象思想设计模式Java进阶数据设计和原理面向对象核心思想IO异常线程和并发JVMJava高级网络协议网络实际案例网络原理和分层Https网络请求故障排查网络协议计算机原理计算机组成结构框架存储器CPU设计内存设计指令编程原理异常处理机制IO操作和原理计算机基础学习C编程C语言入门级别系统全面的学习教程学习三到四个综合案例C编程C编程C语言入门级别系统全面的教学教程并发编程核心原理C编程算法实践专栏数组链表栈队列树哈希递归查找排序等LeetcodeAndroid基础入门开源库解读性能优化Framework方案设计Android 23种设计模式 23种设计模式 描述 核心作用包括创建型模式提供创建对象用例。能够将软件模块中对象的创建和对象的使用分离工厂模式Factory Pattern抽象工厂模式Abstract Factory Pattern单例模式Singleton Pattern建造者模式Builder Pattern原型模式Prototype Pattern结构型模式关注类和对象的组合。描述如何将类或者对象结合在一起形成更大的结构适配器模式Adapter Pattern桥接模式Bridge Pattern过滤器模式Filter、Criteria Pattern组合模式Composite Pattern装饰器模式Decorator Pattern外观模式Facade Pattern享元模式Flyweight Pattern代理模式Proxy Pattern行为型模式特别关注对象之间的通信。主要解决的就是“类或对象之间的交互”问题责任链模式Chain of Responsibility Pattern命令模式Command Pattern解释器模式Interpreter Pattern迭代器模式Iterator Pattern中介者模式Mediator Pattern备忘录模式Memento Pattern观察者模式Observer Pattern状态模式State Pattern空对象模式Null Object Pattern策略模式Strategy Pattern模板模式Template Pattern访问者模式Visitor Pattern
http://www.yayakq.cn/news/2925/

相关文章:

  • 自己做蛋糕有什么网站吗口碑好网站建设价格低
  • 莆田有建设网站的公司码环艺做网站
  • 可以做空股票的网站企业文化经典句子
  • 莱芜网站建设公司在线做图网站
  • 阿里云做网站麻烦吗wordpress主题 know how
  • 专业制作公司网站公司顺义石家庄网站建设
  • 青岛黄岛区做网站设计的wordpress 图标 png
  • 科技 网站 推荐ppt做网站
  • 厦门建设局公维金网站怎样在网上卖自己的东西
  • 网站搭建前景网站更换主机注意
  • html5 中文网站模板dw和vs做网站
  • 成都优化网站源头厂家南京工程网站建设
  • 制作网站开发公司网页制作与设计站点应该怎么建
  • 青岛网站制作公司 网络服务天元建设集团有限公司技术中心
  • 力网站票网站开发杭州海淀区网站建设
  • 长沙整站优化html5微网站demo
  • 网站做友链有什么用明港seo公司
  • 做公司网站建设价格低七里河微信网站建设
  • 如何将自己做的网站传到网上做建材的哪些网站
  • 电子商务网站建设 试题制作企业网站的问题
  • 买标准的网站建设上海市网站建设加盟
  • 天津做网站网页的公司室内设计学校排名
  • 网站的后台管理账号和密码wordpress 开启评论
  • wordpress 调用站外api网站开发一年费用总计
  • 怎么免费搭建属于自己的网站网站制作软件工程师
  • 网站建设语录企业网站的内容
  • 网站建设维护百家号制作网站对话框
  • 如何建设网站济南兴田德润o简介电话北京网络运营推广团队
  • 网站建设费计入销售费用的子目公司管理系统名称大全
  • 凡科网做网站贵吗网站引导页利弊