软件设计原则——开闭原则
开闭原则
对扩展开放,对修改关闭。
在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类。
因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。
而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。
下面以 搜狗输入法
的皮肤为例介绍开闭原则的应用。
【例】搜狗输入法
的皮肤设计。
分析:搜狗输入法
的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的输入法的皮肤,也可以从网上下载新的皮肤。这些皮肤有共同的特点,可以为其定义一个抽象类(AbstractSkin),而每个具体的皮肤(DefaultSpecificSkin和HeimaSpecificSkin)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则的。
AbstractSkin.java
package com.itheima.principles.demo1;/*** @version v1.0* @ClassName: AbstractSkin* @Description: 抽象皮肤类*/
public abstract class AbstractSkin {//显示的方法public abstract void display();
}
DefaultSkin.java
package com.itheima.principles.demo1;/*** @version v1.0* @ClassName: DefaultSkin* @Description: 默认皮肤类*/
public class DefaultSkin extends AbstractSkin {public void display() {System.out.println("默认皮肤");}
}
HeimaSkin.java
package com.itheima.principles.demo1;/*** @version v1.0* @ClassName: HeimaSkin* @Description: 黑马皮肤*/
public class HeimaSkin extends AbstractSkin {public void display() {System.out.println("黑马皮肤");}
}
SougouInput.java
package com.itheima.principles.demo1;/*** @version v1.0* @ClassName: SougouInput* @Description: 搜狗输入法* @Author: dym*/
public class SougouInput {private AbstractSkin skin;public void setSkin(AbstractSkin skin) {this.skin = skin;}public void display() {skin.display();}
}
测试代码
package com.itheima.principles.demo1;/*** @version v1.0* @ClassName: Client* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class Client {public static void main(String[] args) {//1,创建搜狗输入法对象SougouInput input = new SougouInput();//2,创建皮肤对象//DefaultSkin skin = new DefaultSkin();HeimaSkin skin = new HeimaSkin();//3,将皮肤设置到输入法中input.setSkin(skin);//4,显示皮肤input.display();}
}
软件设计原则——开闭原则相关推荐
- 面向对象软件设计的“开—闭”原则
1.什么是开闭原则 "开-闭"原则是指软件实体应当对扩展性开放,对修改关闭.即软件实体应该在不修改的前提下扩展,这个原则实际上为软件设计指明了目标.我们知道软件设计 ...
- 一周技术学习笔记(第67期)-CPU的设计跟开闭原则有关系吗
你能想到CPU的设计是开闭原则的设计吗 说CPU的设计很符合软件设计的开闭原则,估计一般的同学肯定不会这样意识到.其实我也一样不太可能把它们能够想在一起,并将它们关联起来. 可确实就这样发生了.实际上 ...
- 带你认识六种设计原则(开闭原则、里氏代换原则、依赖倒转原则....)
前言 1. 设计原则 1.1. 开-闭原则 1.2. 里氏代换原则 1.3. 依赖倒转原则 1.4. 接口隔离原则 1.5. 合成/聚合原则 1.6. 迪米特法则 前言 学习设计模式之前先要了解其中的 ...
- 六大设计原则--开闭原则
定义 software entities like classes, modules and functions should be open for extension but closed for ...
- 六大设计模式原则-开闭原则
一.开闭原则定义 开闭原则是面向对象的可复用设计的第一块基石,是最重要的面向对象设计原则.定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修 ...
- 设计模式6大原则-开闭原则
设计模式6大原则-开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 开闭原则理念就是当需求改变时,希望在不改变原有代码的前提下,通过扩展模块.函数来满足新需求. 开闭原则是其他 ...
- 设计模式之王者原则 开闭原则
设计模式之王者原则 开闭原则 为什么说 它--开闭原则是王者原则呢? 因为所有原则都是围绕它来实现的,怎么说呢,为什么会有这么多原则呢,都是为了完成它,只要实现它你的代码就不会有什么大的问题 一.定 ...
- 【设计模式】软件设计七大原则 ( 开闭原则 )
文章目录 一.开闭原则简介 二.开闭原则代码示例 1.商品接口 2.普通商品类 3.折扣商品类 4.测试类 一.开闭原则简介 开闭原则 : 定义 : 一个 软件实体 , 类 / 模块 / 函数 , 对 ...
- 软件设计的七大原则 --开闭原则 里氏替换原则 依赖倒置原则
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 这 7 种设计原则是软件设计 ...
最新文章
- LVS_NAT实现负载均衡
- 黑金花大理石_黑金花 , 经典就是经典 ! 美 !
- 互联网营销离不开“SEO”
- mysql更新一个表里的字段等于另一个表某字段的值
- Loj 【CQOI 2006】简单题,mmp
- 机器学习系列2:从线性方程的角度看的线性回归【1】
- CMake使用介绍(2)
- java 数据抓取 动态获得cookies里变动的属性_@CookieValue获取Cookie信息,使用Servlet API作为入参,处理模型数据...
- (九)企业分布式微服务云SpringCloud SpringBoot mybatis-服务链路追踪(Spring Cloud Sleuth)...
- 通知NSNotificationCenter
- Mybatis 常用开发注解(批量插入)
- 一个很方便使用十六进制的颜色值的宏
- Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you‘re try
- VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
- 这一篇彻底说清楚了!乐高,编程,机器人到底要不要学?
- 【R语言】ggplot2:初次见面,请多多关照!
- Adobe Audition CC 2019 下载安装教程
- 科研写作——常见句式(十一)
- ParaView-1
- vl53l1x激光测距讲解
热门文章
- app每次更新版本时调用js代码提示用户下载更新
- Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别
- java笔试之字符串反转
- 关于Mysql 修改密码的记录
- POJ 2485-Highways
- Nboot中nand flash控制器参数TACLS、TWRPH0和TWRPH1的确定(基于K9F1208U0B)
- JAVA-接口和抽象类的区别
- 【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系
- [HDU 1427]速度计算24点(DFS暴力搜索)
- docker supervisor管理进程