-
设计原则之单一职责原则的概念及实例代码操作
2020-12-03 10:40:31场景 例题:学生管理类StudentManager包含...不使用单一职责原则的解法: public class Demo { public void getConnection(String uri) { System.out.println("与"+uri+"建立联系"); } public void searchStudent(S场景
例题:学生管理类StudentManager包含如下功能,包括连接数据库方法getConnection()、操作数据库方法入search和delete、显示学生信息的方法display。
不使用单一职责原则的解法:
public class Demo { public void getConnection(String uri) { System.out.println("与"+uri+"建立联系"); } public void searchStudent(String condition) { System.out.println("根据"+condition+"查询学生"); } public void deleteStudent(String condition) { System.out.println("根据"+condition+"删除学生"); } public void display() { System.out.println("显示学生信息!"); } //学生类有三个职责,连接数据库,查询、删除数据,显示查询结构 //存在问题 //1.如果需要修改连接的数据库服务器,需要修改这个类 //2.如果需要修改查询方式,或者增加插入学生数据,需要修改这个类。 //有两个引起变化的原因,职责不单一。
单一职责原则概念:
使用单一职责原则的解法:类图:
代码实现://优点 //1.DBUtil封装了数据库连接操作,更改数据库服务器仅仅修改这个类或者配置文件 //2.studentDAO封装了操作数据库的方法,增减插入、更改查询方式等方法比较容易 //学生管理类,仅仅显示学生信息,职责单一 public class studentManager { private studentDAO dao; public studentManager(studentDAO dao) { super(); this.dao = dao; } public void display() { System.out.println("显示学生信息!"); } } //数据库操作类,职责单一 public class studentDAO { private DBUtil db; public studentDAO(DBUtil db) { super(); this.db = db; } public void searchStudent(String condition) { System.out.println("根据"+condition+"查询学生"); } public void deleteStudent(String condition) { System.out.println("根据"+condition+"删除学生"); } } //数据库工具类,职责单一 public class DBUtil { public void getConnection(String uri) { System.out.println("与"+uri+"建立联系"); } } //实例测试类 public class demo { public static void main(String[] args) { DBUtil db=new DBUtil(); studentDAO dao=new studentDAO(db); studentManager sm=new studentManager(dao); db.getConnection("MYSQL"); dao.searchStudent("孙悟空"); sm.display(); } }
运行截图:
-
设计原则之里氏替换原则的概念及实例代码操作
2020-12-03 17:24:29不使用里氏替换原则的解法: 代码实现: //具体类 class ReadFile { public void read(String fileName){ System.out.println("读取Excel文件"+fileName); } } class ReadDoc extends ReadFile{ //子类覆写父类的...场景
例题:设计文件管理系统,能够读取txt、doc和Excel等文件,采用子类继承父类方式
不使用里氏替换原则的解法:
代码实现:
//具体类 class ReadFile { public void read(String fileName){ System.out.println("读取Excel文件"+fileName); } } class ReadDoc extends ReadFile{ //子类覆写父类的方法 public void read(String fileName){ System.out.println("读取doc文件"+fileName); } } class Demo{ public static void readFile(ReadFile a,String fileName){ a.read(fileName); } public static void main(String[] args){ readFile(new ReadFile(),"a.xsl"); readFile(new ReadDoc(),"a.xsl"); } }
里氏替换原则的概念
所有引用基类的地方必须能透明地使用其子类的对象,即替换成子类之后,系统的行为不会发生改变
使用里氏替换原则的解法:
代码实现://父类是接口 public interface Readable{ void read(String fileName); } //子类实现了接口Readable public class ReadDoc implements Readable{ @Override public void read(String fileName){ System.out.println("读取doc文件"+fileName); } } public class ReadXsl implements Readable{ @Override public void read(String fileName){ System.out.println("读取xsl文件"+fileName); } } //里式替换原则 public class Demo{ public static void readFile(Readable r,String fileName){ r.read(fileName); } public static void main(String[] args){ Readable r= new ReadDoc(); readFile(r,"a.doc");//读取doc文件 ReadXsl rs = new ReadXsl(); readFile(rs,"b.xsl");//子类透明替换父类(接口) } }
运行截图:
-
设计原则之接口隔离原则的概念及实例代码操作
2020-12-03 11:22:29不使用接口隔离原则的解法: 代码实现: public interface HandleScore { void insert(); void delete(); void search(); void updata(); void print(); } public class Student implements场景
例题:设计学生信息管理系统,有查询成绩search、修改成绩update、增加成绩insert、删除成绩delete、打印成绩print等功能
不使用接口隔离原则的解法:
代码实现:public interface HandleScore { void insert(); void delete(); void search(); void updata(); void print(); } public class Student implements HandleScore{ public static void main(String[] args) { } @Override public void insert() {} @Override public void delete() { } @Override public void search() {} @Override public void updata() {} @Override public void print() { System.out.println("输出学生成绩"); } } //缺点,存在接口污染 //因为学生只能查询成绩,不能修改,删除记录 //HandleScore接口存在Student不需要的方法 //家排污管理人员实现修改查询接口 public class Academic implements Updatable,Searchable,Printable { @Override public void print() {} @Override public void search() {} @Override public void updata() { } }
存在问题:如果学生仅仅能够查询成绩,学生类Student实现这个接口,存在不需要的方法,即接口污染
接口隔离原则的概念
接口隔离原则有四个作用:
(1)避免接口污染:一个类如果要实现一个接口,那么就要实现这个接口的所有方法,如果这个接口包含这个类不需要的方法,就会造成接口污染,为系统留下隐患
(2)提高灵活性:一个类可以同时实现多个接口,所以将一个臃肿的接口分割为若干个小接口,通过小接口的不同组合可以满足更多的需求
(3)提高定制服务:通过细化接口为访问者提高需要的方法
(4)实现高内聚:高内聚就是接口、类、模块中定义了一组相关的行为。接口是对外界的承诺,承诺越少对系统的开发越有利,变更的风险也就越少,同时也有利于降低成本。通过细化接口实现高内聚。使用接口隔离原则的解法:
代码实现://对HandleScore接口进行细化 //修改接口 public interface Modifyable{ void delete(); void insert(); } //输出学生成绩接口 public interface Printable { void print(); } //查询学生成绩接口 public interface Searchable { void search(); } public class Student implements Searchable{ @Override public void search() { } } public class Teacher implements Searchable,Updatable,Printable { @Override public void print() { } @Override public void search() {} @Override public void updata() { } } public interface Updatable { void updata(); }
-
设计原则之开闭原则的概念及实例代码操作
2020-12-03 11:05:37不使用开闭原则的解法: 在Car类中修改代码 代码实现: //设计类 public class Car { public void start() { System.out.println("启动汽车"); } public void run() { //在run方法中增加导航功能 System.out...场景
例题:设计汽车Car,有start、run和stop方法,现在需要增加导航功能。
不使用开闭原则的解法:
在Car类中修改代码
代码实现://设计类 public class Car { public void start() { System.out.println("启动汽车"); } public void run() { //在run方法中增加导航功能 System.out.println("开始导航!!"); System.out.println("汽车在行驶"); } public void stop() { System.out.println("停车!"); } } //实例测试类 public class Demo { public static void main(String[] args) { Car gelly=new Car(); gelly.start(); gelly.run(); gelly.stop(); } }
不足之处:
(1)有些汽车可能没有导航功能
(2)如果有些方法调用了run方法,可能出现问题开闭原则 的概念
软件实体应当对扩展开放,对修改关闭
使用开闭原则的解法:
新类CarNavigation对Car进行扩展,重写run方法,按照导航行驶
代码实现://设计类 public class Car { public void start() { System.out.println("启动汽车"); } public void run() { System.out.println("汽车在行驶"); } public void stop() { System.out.println("停车!"); } } //导航类 public class CarNavigation extends Car{ private void navigate() { System.out.println("开始导航!"); }; public void run() { this.navigate(); System.out.println("汽车跟着导航行驶!"); } } //实例测试类 public class Demo { public static void main(String[] args) { CarNavigation gelly=new CarNavigation(); gelly.start(); gelly.run(); gelly.stop(); System.out.println("-----没有导航的汽车------"); Car qq=new Car(); qq.start(); qq.run(); qq.stop(); } }
运行截图:
-
集成电路的设计原则及概念
2020-08-18 19:05:04文章简单介绍了集成电路的设计原则及其概念 -
概念产品推广原则DOC
2020-12-12 18:06:38相信在营销管理的你一定需要一款概念产品推广原则DOC学习参考,而概念产品推广原则DOC能够给予你在营销管...该文档为概念产品推广原则DOC,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看 -
设计模式的概念及其基本原则
2017-12-29 18:22:351. 设计模式概念 在一定的环境中总能用固定的套路解决实际问题,这种套路就叫做设计模式。这些套路将问题标准化:对各部分进行抽象、归纳和解耦合。注意,设计模式的实现基础是多态。 设计模式可分为3个... -
软件工程的概念,目标和原则
2020-12-25 01:04:001 软件工程的概念 IEEE对软件工程的定义为: 1)将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件 2)对1)中所述方法的研究 具体说来,软件工程是以借鉴传统工程的原则、... -
事务的概念以及ACID原则
2016-06-16 11:12:19事务的四个特性(ACID原则) 1、事务的原子性(Atomicity)是指一个事务要么全部执行,要么全部不执行,也就是说一个事务不可能只执行了一半就停止了。 2、事务的一致性(Consistency)是指事务的运行并不改变... -
面向对象设计原则和设计模式的概念
2009-10-09 00:28:35面向对象设计原则和设计模式的概念,讲述面向对象的设计模式 -
面向对象设计模式的基本概念和原则代码
2014-06-24 16:59:01面向对象设计模式的基本概念和原则,dome例子 -
OO的概念和设计原则
2015-04-05 18:09:47面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性, 来认识、理解、刻划客观世界和设计、构建相应的软件系统。 面向对象的特征:虽然各种面向对象编程语言... -
六大设计原则基本概念
2017-11-29 17:27:19面向对象设计原则:它是设计和编码的指导思想,通过设计原则可以提升代码的扩展性和灵活性。1、单一职责原则(SRP): 一个类只负责一个功能领域中的相应职责,或者可以定义为,就一个类而言,应该只有一个引起它变化... -
谈谈架构的概念、架构的形式、架构设计原则
2018-05-01 00:00:00之前开头的《架构设计原则》一文一直没有把坑填上。而最近在公司内部做了一次架构交流/培训,把架构的概念、架构的形式、架构设计原则都做了阐述,正好算是对此文的完成和补充。PP... -
软件设计的概念与原则
2016-11-24 14:03:17一、主要内容; 1. 将软件划分成若干独立成分的依据。 2. 怎样表示不同的成分内得功能细节和数据结构。 3. 怎样统一衡量软件设计的技术...软件工程过程的每一步都是对软件解法的抽象层次的一次精化。逐步求精与抽 -
测试用例概念 原则
2018-10-25 22:12:55测试用例概念 原则 什么是测试用例 测试用例为一组条件或变量,根据其来确定应用软件是否能够正常的工作。其条件和变量为测试用例。测试用例属于最小的执行的实体,只有两种,通过或不通过。 基本原则 测试用例的... -
数据库-转换原则概念
2020-06-14 20:28:28数据库-转换原则概念规则一:一个实体(矩形)必须要转为一个关系模式规则二:一个多对多的菱形必须被抽象成一个关系模式规则三:一个一对多的菱形 可以分成两种情况:情况一:可以被抽象成一个关系模式情况二:可以... -
结构程序设计的相关概念及其原则
2018-11-28 15:27:09结构程序设计的概念最早由E.W.Dijkstra提出。理论上最基本的控制结构只有顺序结构和循环结构两种,选择结构可由顺序和循环组合实现,三种基本的控制结构为顺序、循环、选择。 设计原则·: (1)使用顺序、选择、... -
进度控制的概念和一般原则
2006-07-17 14:38:00进度控制的概念和一般原则 -
字体设计的概念、意义与原则
2020-07-31 09:59:42字体设计的概念 文字是一个极其庞大的体系,蕴含着人类集体的智慧,而且对人类社会文明起到了见证作用,西方的文明孕育出拉丁字母,东方的文明诞生了中国汉字。 在字体设计中,首先是将字体定位,对收集到的相关资料... -
Java内存模型的概念与happens-before原则详解
2020-04-13 22:59:12本文详细介绍了Java内存模型的概念、由来,以及happens-before原则的具体规则。 -
如何理解设计模式的六大原则概念?
2020-10-29 13:40:29设计模式的六大原则 1.开闭原则(Open Close Principle): 开闭原则就是说对扩展开放,对修改关闭,在程序需要进行扩展的时候,不能去修改原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好... -
SOA 的基本概念及设计原则浅议
2009-09-24 11:13:34SOA 的基本概念及设计原则浅议 可以了解一下啊 -
高效SQL执行的基本概念及基本原则
2007-06-05 17:18:21高效SQL执行的基本概念及基本原则 -
设计原则概念总结
2016-04-14 11:18:06单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的... -
重构的基本概念和原则
2015-08-25 21:30:371,什么是重构? 1. 重构的定义 我的理解就是一种高效 受控的代码整理技术,其最终目的... 名词上的定义: 在不改变软件可观察行为j的前提下对软件内部结构的一种调整,目的是提高程序理解性,可修改性。 -
利用测试概念进行代码设计时的七条基本原则[1]
2021-03-23 16:24:11概念利用测试概念进行代码设计时的七条基本原则[1]软件测试当设计大型程序的时候,您必须时刻留心不同设计选项对诸如性能和可扩展性这样的特征的影响。随着软件产品的日渐复杂及其无所不在的部署,软件的“可测试性...