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

网站域名注册证明北京门户网站开发

网站域名注册证明,北京门户网站开发,企业建设网站的目的( ),网页制作模板中文个人主页#xff1a;金鳞踏雨 个人简介#xff1a;大家好#xff0c;我是金鳞#xff0c;一个初出茅庐的Java小白 目前状况#xff1a;22届普通本科毕业生#xff0c;几经波折了#xff0c;现在任职于一家国内大型知名日化公司#xff0c;从事Java开发工作 我的博客金鳞踏雨 个人简介大家好我是金鳞一个初出茅庐的Java小白 目前状况22届普通本科毕业生几经波折了现在任职于一家国内大型知名日化公司从事Java开发工作 我的博客这里是CSDN是我学习技术总结知识的地方。希望和各位大佬交流共同进步 ~ 本文来自抖音《IT楠老师》设计模式课程下面是本人结合原课件的一些学习心得。 一、原理概述 子类对象能够替换程序中父类对象出现的任何地方并且保证原来程序的逻辑行为不变及正确性不被破坏。 举一个最简单的例子就是我们定义了一个函数它的参数是 XXX(List list)当我们传入ArrayList的对象它的子类,不会有任何问题 案例分析 案例一 // 基类鸟类 public class Bird {public void fly() {System.out.println(I can fly);} }// 子类企鹅类 public class Penguin extends Bird {// 企鹅不能飞所以覆盖了基类的fly方法但这违反了里氏替换原则public void fly() {throw new UnsupportedOperationException(Penguins cant fly);} } 企鹅不会飞所以在企鹅类中重写的fly()会抛出异常。那么这个子类并不能很好的替代父类因为它执行fly() 方法会报错 为了遵循LSP我们可以重新设计类结构将能飞的行为抽象到一个接口中让需要飞行能力的鸟类实现这个接口对于企鹅就不实现这个方法 // 飞行行为接口 public interface Flyable {void fly(); }// 基类鸟类 public class Bird { }// 子类能飞的鸟类 public class FlyingBird extends Bird implements Flyable {Overridepublic void fly() {System.out.println(I can fly);} }// 子类企鹅类不实现Flyable接口 public class Penguin extends Bird { } 通过这样的设计我们遵循了里氏替换原则同时也保证了代码的可维护性和复用性。 案例二 假设我们正在开发一个支持多种数据库的程序包括MySQL、PostgreSQL和SQLite。我们可以使用里氏替换原则来设计合适的类结构确保代码的可维护性和扩展性。 首先我们定义一个抽象的Database基类它包含一些通用的数据库操作方法如connect()、disconnect()和executeQuery()。这些方法的具体实现将在子类中完成。 public abstract class Database {public abstract void connect();public abstract void disconnect();public abstract void executeQuery(String query); } 然后为每种数据库类型创建一个子类继承自Database基类。这些子类需要实现基类中定义的抽象方法并可以添加特定于各自数据库的方法。 public class MySQLDatabase extends Database {Overridepublic void connect() {// 实现MySQL的连接逻辑}Overridepublic void disconnect() {// 实现MySQL的断开连接逻辑}Overridepublic void executeQuery(String query) {// 实现MySQL的查询逻辑}// 其他针对MySQL的特定方法 }public class PostgreSQLDatabase extends Database {// 类似地为PostgreSQL实现相应的方法 }public class SQLiteDatabase extends Database {// 类似地为SQLite实现相应的方法 } 这样设计的好处是我们可以在不同的数据库类型之间灵活切换而不需要修改大量代码。只要这些子类遵循里氏替换原则我们就可以放心地使用基类的引用来操作不同类型的数据库。例如 public class DatabaseClient {private Database database;public DatabaseClient(Database database) {this.database database;}public void performDatabaseOperations() {database.connect();database.executeQuery(SELECT * FROM users);database.disconnect();} }public class Main {public static void main(String[] args) {// 使用MySQL数据库DatabaseClient client1 new DatabaseClient(new MySQLDatabase());client1.performDatabaseOperations();// 切换到PostgreSQL数据库DatabaseClient client2 new DatabaseClient(new PostgreSQLDatabase());client2.performDatabaseOperations();// 切换到SQLite数据库DatabaseClient client3 new DatabaseClient(new SQLiteDatabase());client3.performDatabaseOperations();} } 通过遵循里氏替换原则我们确保了代码的可维护性和扩展性。如果需要支持新的数据库类型只需创建一个新的子类实现Database基类中定义的抽象方法即可。 好了我们稍微总结一下。虽然从定义描述和代码实现上来看多态和里式替换有点类似但它们关注的角度是不一样的。 多态是面向对象编程的一大特性也是面向对象编程语言的一种语法。它是一种代码实现的思路。里式替换是一种设计原则是用来指导继承关系中子类该如何设计的子类的设计要保证在替换父类的时候不改变原有程序的逻辑以及不破坏原有程序的正确性。 二、哪些代码明显违背了 LSP 1. 子类覆盖或修改了基类的方法 当子类覆盖或修改基类的方法时可能导致子类无法替换基类的实例而不引起问题。这违反了LSP会导致代码变得脆弱和不易维护。 public class Bird {public void fly() {System.out.println(I can fly);} }public class Penguin extends Bird {Overridepublic void fly() {throw new UnsupportedOperationException(Penguins cant fly);} } 在这个例子中Penguin类覆盖了Bird类的fly()方法抛出了一个异常。这违反了LSP因为现在Penguin实例无法替换Bird实例。 2. 子类违反了基类的约束条件 当子类违反了基类中定义的约束条件如输入、输出或异常等也会违反LSP。 // 栈 public class Stack {private int top;private int[] elements;public Stack(int size) {elements new int[size];top -1;}public void push(int value) {if (top elements.length - 1) {throw new IllegalStateException(Stack is full);}elements[top] value;}public int pop() {if (top 0) {throw new IllegalStateException(Stack is empty);}return elements[top--];} }// 正数的栈 public class NonNegativeStack extends Stack {public NonNegativeStack(int size) {super(size);}Overridepublic void push(int value) {if (value 0) {throw new IllegalArgumentException(Only non-negative values are allowed);}super.push(value);} } 在这个例子中NonNegativeStack子类违反了Stack基类的约束条件因为它在push()方法中添加了一个新的约束即只允许非负数入栈。这使得NonNegativeStack实例无法替换Stack实例而不引发问题违反了LSP。 正确的写法应该是 public class NonNegativeStack extends Stack {public NonNegativeStack(int size) {super(size);}Overridepublic void push(int value) {super.push(value);}// 定义新的约束条件public void pushNonNegative(int value) {if (value 0) {throw new IllegalArgumentException(Only non-negative values are allowed);}super.push(value);} } 3. 子类与基类之间缺乏is-a关系 当子类与基类之间缺乏真正的is-a关系时也可能导致违反LSP。例如如果一个类继承自另一个类仅仅因为它们具有部分相似性而不是完全的is-a关系那么这种继承关系可能不满足LSP。 为了避免违反LSP我们需要在设计和实现过程中注意以下几点 确保子类和基类之间存在真正的is-a关系。(你就是一个它)遵循其他设计原则如单一职责原则、开闭原则和依赖倒置原则。 文章到这里就结束了如果有什么疑问的地方可以在评论区指出~ 希望能和大佬们一起努力诸君顶峰相见 再次感谢各位小伙伴儿们的支持
http://www.hkea.cn/news/14505985/

相关文章:

  • 织梦cms网站更新滨海做网站价格
  • 什么搜索引擎搜索最全seo服务外包公司
  • 比价网站开发北京中高风险地区最新名单最新
  • 建设部网站城市规划资质标准做网站超链接用什么软件
  • 构建网站系统小程序招商加盟平台
  • 网站营销型wordpress主题安装空白
  • 排名好的大连网站建设企业型网站开发
  • 网站建设招标评分标准免费网页设计教程视频教程
  • 深信服对单一网站做限速360浏览器怎么加入可信站点
  • 网站后台管理系统进度做网站 注意
  • 手机网站建设经验wordpress文件缺失
  • 长沙市天心区建设局网站优速网站建设
  • 网站建设公司 北京iis7如何部署网站
  • 站酷设计网站官网入口免费酒店管理专业建设规划
  • 公益网站的设计与建设网站开发实训结果分析及其心得体会
  • 城乡厅建设部网站首页电子商城官网
  • 丹徒区建设局网站flash做游戏下载网站
  • 购物网站模块是什么意思电影介绍网页设计代码
  • 视频播放网站建设免费招商加盟代理
  • 网站的建设有什么好处巢湖市重点工程建设管理局网站
  • 移动端优秀网站wordpress不能重置密码
  • 椒江网站建设可以做网站的软件上传歌曲
  • seo网站推广简历桂林人论坛新闻
  • 营销型网站一般有哪些内容爱建站吧
  • 苏州网站建设专业的公司域名官网
  • 长沙企业网站建设公扬州网站建设哪家好
  • 电商网站销售数据分析自己如何制作一个网站
  • 最好的网站建设vscode网页设计教程
  • 做软件挣钱的网站西安网站建设方案
  • 传奇广告查询网站济南建设工程交易中心