自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 设计模式-单例模式

单例模式是一个高频的面试题,看似是最简单的模式,其实有很多值得去挖掘的点,本文整理的单例模式的类型、优缺点、序列化的破坏、反射攻击、源码中的使用,希望大家能结合实践加深理解~

2023-10-26 15:18:33 39

原创 设计模式-建造者模式

将一个复杂类型的构建与它的标示分离,使得同样的构建过程可以创建不同的表示。用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道。类型:创建型。

2023-10-21 11:32:52 37 1

原创 设计模式-抽象工厂

抽象工厂提供了一个创建一系列相关或相互依赖对象的接口。无需指定它们具体的类。类型:创建型。通过抽象工厂,定义了工厂和产品的接口契约,规范了接口的定义,更具有通用性和扩展性,使软件的架构更加清晰,但是也增加了系统的抽象性和理解难度,在日常工作中,需要按情况进行使用。

2023-10-19 10:09:04 53 1

原创 设计模式-工厂方法

与产品等级对应的一个概念产品族,打个比方,海尔和美的,他们各自都能生产很多产品,如冰箱、空调、洗衣机等,那海尔和美的就是两个产品族,抽象工厂是用来解决产品族的抽象的问题的。上述代码中,Collection就相当于工厂的抽象,iterator就是产品的抽象,Arraylist就是具体的工厂,Arraylist中的内部类Itr就是具体的产品。上述代码中,首先定义了产品和产品工厂的抽象,在具体的工厂实例子类中,完成对具体产品的创建,满足开闭原则。优点:用户只需要关心所需产品相应的工厂,无需关心创建的细节;

2023-10-17 09:03:44 32

原创 设计模式-简单工厂

由此可见,简单工厂适合于判断逻辑比较少而且不会频繁变化的业务,例如某一天上线了前端课程、算法课程、大数据课程,那这个工厂就会频繁的修改判断逻辑,违反了开闭原则。以mysql为例,当引入driver之后会自动实例化driver对象,执行static静态方法,完成driver的注册,drivermanager获取连接时进行driver的遍历,从而确认使用相应的数据库驱动。JDK中Calendar创建实例的源码,就使用了简单工厂的思想,通过简单的逻辑判断返回不同的实现。适用场景:工厂类负责创建的对象比较少;

2023-10-16 18:45:17 38 1

原创 软件设计原则-合成复用原则

上述的代码能满足当前的业务要求,但是假如后续我们的数据库新增了postgresql,oracle,sqlserver等等,当然我们可以在DBConnection类中新增返回oracle,sqlserver等数据库练级饿的方法,但是违反的了开闭原则,可能引发别的维护成本。通过合成复用,可以灵活的进行扩展而不破坏开闭原则,如果我们还要新增别的数据库连接,只需要增加新的类实现DBConnection的getConnection方法即可,应用层选择注入不同的连接实现类就能灵活的满足业务需要。

2023-10-13 08:51:50 37

原创 软件设计原则-里式替换原则

当我们在Test类中的main方法使用长方形作为入参的时,程序运行正常,但是当使用正方形作为入参进行实验时,程序出现了死循环,因为正方形的长宽相等,while (rectangle.getWidth()

2023-10-12 09:27:09 63

原创 软件设计原则-迪米特原则

迪米特原则,最重要的是要能区分出哪些类是直接的朋友,哪些类不是朋友,尽量做到弱耦合,提高类的复用率,同时在日常的开发中要适度,否则可能会产生大量的中介类,导致类的结构复杂,带来了维护的难度。这里的朋友指的是,出现在成员变量、方法的输入、输出参数中的类,而出现在方法体内部的类不属于朋友类。调整之后的代码,Boss不需要了解具体的实现,只需要给朋友 teamLeader下指令即可,也不需要知道course。System.out.println("在线课程的数量是:"+courseList.size());

2023-10-11 08:28:06 34

原创 软件设计原则-接口隔离原则

单一职责和接口隔离的区别:单一职责原则强调的是类、接口、方法的职责单一,针对的是程序中实现和细节,强调的是职责,接口隔离原则强调的是对接口依赖的隔离,针对抽象,程序框架的构建。很明显, 狗是没法飞的,鸟也是没法游泳的,所以aniamlAction这个接口是可以进一步细化的,细化出飞行动物的行为和别的动物的行为的。所以V1版本是不符合接口隔离原则的,我们进行改造,通过细化出多个小接口,实现类通过实现多个小接口来组合出想要的接口,V2版本的代码如下,,而不使用单一的总接口,客户端不应该依赖它不需要的接口。

2023-10-10 09:31:20 47 1

原创 软件设计原则-单一职责原则

日常的开发中,我们呢经常会写一些增删改查的操作,此处我以更新用户的基本信息为例,updateUserInfo方法中,通过判断来更新用户名或者是用户地址,此处,我们就可以将该方法进行拆分,将更新用户名和地址拆分两个方法,让应用层来决定更新什么操作。针对上述问题,我们将接口职责进行划分,这样的话,从接口层面进行了职责的隔离,职责更加清晰,降低了维护的复杂度,实现类可以通过实现多个职责的接口,组合出想要的具体实现,更加的灵活,V2版本如下,System.out.println(birdName+"用翅膀飞");

2023-10-07 11:19:56 42 1

原创 软件设计原则-依赖倒置原则

通过上述改造, Galen从依赖课程的具体实现,改造成依赖课程的抽象接口,无论Galen想学什么课程,我们都可以在不改变Galen的基础上,将ICourse进行扩展,在应用层传入不同的实现满足要求。在这个版本中,Galen学习课程,依赖了具体的实现,违反了依赖倒置原则。那这样的话,假如Galen要学习python课程,只需要再扩展一个python的课程,而上层的Galen不需要再进行调整,因为其依赖了抽象接口ICourse。System.out.println("Galen在学习Python课程");

2023-09-07 10:00:59 140

原创 软件设计原则-开闭原则

当然,软件的开发中,没有绝对的对错,需要具体情况具体分析,开闭原则也有其缺点,比如可能会出现类爆炸的情况,类之间的关系比较复杂,耦合会比较严重。通过这样去实现,符合我们的开闭原则,对原有的修改关闭,对新业务进行了扩展,修改后只会影响到新增的类,对原有的类不会有影响,应用侧修改相关的接口实现类即可。但是随着业务的扩展,水果可能会进行打折促销,现在的设计就需要进行调整,有两种方式进行实现,一种是改动现有的接口和类,另一种是在现有的基础上进行扩展。比如以水果店卖水果为例,主要的业务查询水果的名称及价格。

2023-09-06 16:05:50 186 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除