架构
文章平均质量分 58
前进道路上的程序猿
喜欢唱歌,热爱运动
展开
-
观察者模式实现原理
前言观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主题对象,当主题对象发生变化时,它的所有观察者都会收到通知并作出相应的动作。观察者模式又叫发布订阅模式,需要观察者对被观察者发布的的动作进行订阅。实现主要类我们新建的这几个类中,Event是事件类,用于包装触发事件的相关信息;MouseEventType接口中定义了各种事件类型;EventLisenter是监听器类,它是观察者的桥梁;Mouse是被观察者类,当它作出动作时,观察者就会反应并作出相应动作。MouseEventCa原创 2022-01-15 19:04:02 · 1354 阅读 · 0 评论 -
装饰者模式案例
前言装饰者模式是指在不改变原有对象的基础上,将功能附加在对象上,提供了比继承者更有弹性方案。案例在现实生活中,我们买车一般有基础配置、中配、高配等,在这里我们就可以应用装饰者模式来这种情况进行描述创建车辆接口首先我们创建一个车辆接口,里面有两个方法,分别用于获取描述信息以及价格ICarpublic interface ICar { public String getMsg(); public int getPrice();}创建基础版车NormalCardpublic原创 2022-01-15 09:52:22 · 298 阅读 · 0 评论 -
适配器案例
前言适配器模式是指将一个类的接口转换成用户期望的另一个接口,是原本接口不兼容的类可以一起工作,属于结构型设计模式。适配器模式最长引用的案例就是电压转换头案例我们在显示生活中的民用电一般是220V交流电,但是我们手机使用的一般是5V的直流电,所需想要给手机充电就需要用到电源适配器来讲220V交流电转换为5V直流电创建220V交流电类220V交流电类,输出220V方法AC220public class AC220 { public int outputAC220V() {原创 2022-01-13 21:05:17 · 180 阅读 · 0 评论 -
利用模板模式重构JDBC操作业务场景
前言模板模式是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。JDBC操作业务是运用模板模式一个很典型的场景,下面我们就利用模板模式重构JDBC操作业务场景案例我们以查询为例,首先我们定义一个RowMapper接口,这个接口定义了mapRow方法,用于实现实体关系映射RowMapper:public interface RowMapper<T> { T mapRow(ResultSet rs,int rowNum) throws Exception;}接下来,原创 2022-01-11 20:36:25 · 195 阅读 · 0 评论 -
策略模式的使用
前言策略模式是指定义了算法家族并分别分装起来,让他们之间可以互相替换,使得算法的变化不会影响使用算法的用户策略模式最常用的场景是一个系统需要动态地在集中算法中选择,例如支付场景,接下来我们就以支付场景为里来解释策略模式案例定义支付抽象类Payment首先我们定义支付抽象类Payment :public abstract class Payment { public abstract String getName(); protected abstract double quer原创 2022-01-09 20:42:55 · 607 阅读 · 0 评论 -
委派模式详解
前言委派模式的基本作用就是负责任务的调用和分配案例显示中,一般公司都是老板给项目经理下达任务,项目经理根据具体情况给相应员工派发任务,所以可以用代码来实现首先,我们新建员工接口IEmployeepublic interface IEmployee { public void doing(String command);}然后新建两种员工类型EmployeeA :public class EmployeeA implements IEmployee { @Override原创 2022-01-09 16:26:35 · 374 阅读 · 0 评论 -
代理模式详解
代理模式详解前言静态代理动态代理JDK实现方式定义代理类定义接口实现接口测试CGlib方式的动态代理引入CGlib新建代理类新建目标类测试前言代理模式在软件开发中经常用到,它是指为对象提供一种的代理,以控制对这个对象的访问。代理模式主要有两个目的:一是保护目标对象,二是增强目标对象。代理模式主要有两种:静态代理和动态代理,接下来,我们就用实际例子来解释静态代理静态代理实现很简单,就是客户端不直接使用目标对象方法,而是调用代理对象方法,而代理对象方法里面调用目标对象,同时在其前后做相应的增强显示生活原创 2022-01-09 14:18:08 · 452 阅读 · 0 评论 -
原型模式中的深克隆和浅克隆
前言原型模式是指原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。在原型模式中,我们涉及到浅克隆和深克隆这两个概念,浅克隆中引用对象仍然指向原来的对象,深克隆则指向新的对象,下面我们就用案例来解释案例我们新建两个类,课程类和视频类,每个课程都有相应的视频Video :public class Video implements Serializable { private String videoName;}Course :public class Course imp原创 2022-01-05 22:00:21 · 238 阅读 · 0 评论 -
单例模式详解
前言单例模式是确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。实际业务中如J2EE里的ServletContext,Spring中的ApplicationContext等都是单例模式饿汉式单例模式饿汉式单例模式在类加载的时候就立即初始化,并且创建单例对象。public class HungrySingleton { private static final HungrySingleton hungrySingleton = new HungrySingleton();原创 2022-01-03 20:41:42 · 477 阅读 · 0 评论 -
关于简单工厂模式、工厂方法模式和抽象工厂模式的解析
文章目录前言简单工厂模式创建ICourse接口实现ICourse接口创建工厂类测试工厂方法模式创建课程类接口创建具体实现课程类创建工厂类接口创建具体工厂类测试抽象工厂模式创建笔记和视频接口具体JAVA的笔记和视频创建工厂类接口Java课程工厂实现类测试前言简单工厂模式是由一个工厂对象来决定创建哪一种产品类的实例工厂方法模式是特定类的工厂决定生产这个类的实例抽象工厂模式是由工厂创建一系类的类下面我们就用实际案例来具体解释简单工厂模式创建ICourse接口在案例中我们新建ICourse接口,并原创 2022-01-03 14:35:11 · 447 阅读 · 0 评论 -
关于JDBC操作数据的演进(从最基础方式到JDBCTemplate)
文章目录前言前期准备原始操作数据库方式创建实体类创建DAO类测试改进1改进2新建db.properties改造JdbcUtils改进3创建模板类JdbcTemplate调用模板类方法改进4创建IRowMapper接口创建StudentRowMapper改造JdbcTemplate改造StudentDao改进5改造IRowMapper改造JdbcTemplate前言在项目中,对数据库进行操作是我们非常重要的一个工作部分,此时我们通常不会使用最原始的数据库操作方法,而是使用一些包装好的中间件来进行数据库操作原创 2022-01-03 09:50:26 · 800 阅读 · 0 评论 -
软件架构设计原则-合成复合原则
前言合成复合原则要求我们在软件设计中尽量使用对象组合和聚合而不是集成关系达到软件复用的目的,这样可以使系统更加灵活,降低类与类的耦合度。典型案例在软件开发过程中,我们常常会使用到数据库,接下来我们就以数据库连接做一下简单的示例首先,我们新建一个数据库连接类DBConnectionpublic class DBConnection { public String getConnection() { return "MySql数据库连接"; }}然后我们新建一个产原创 2022-01-02 09:11:07 · 590 阅读 · 0 评论 -
软件架构设计原则-里氏替换原则
前言里氏替换原则简单的理解可以是父类用到的地方可以用子类替换并且不改变逻辑,这就要求子类可以扩展父类的功能,但不能改变父类原有的功能。里氏替换原则要求(1) 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法,(2) 子类可以增加自己特有的方法(3) 当子类的方法重载父类的方法时,方法的入参要比父类方法的入参更宽松,但返回值要比父类更严格接下来我们就用一个案例来解释案例在生活中,有矩形和正方形,正方形是长宽相等的矩形,所以我们新建这样两个类public class Rectanger {原创 2021-12-31 20:32:56 · 407 阅读 · 0 评论 -
软件架构设计原则-迪米特原则
前言迪米特原则是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则,尽量降低类与类之间的耦合度。接下来,我们就以实际案例来说明案例我们有一个系统,其中有Course课程类,Leader领导类,Boss老板类;其中leader可以统计雇员人数,老板可以通过Leader获得雇员人数如下:public class Course {}public class TeamLeader { public void checkNumberOfCourses(List<Course>原创 2021-12-30 21:12:01 · 2088 阅读 · 0 评论 -
软件架构设计原则-接口隔离原则
前言接口隔离原则是指用多个专门的接口,而不适用单一的总接口,接下来,我们一个实际的案例来解释案例首先我们定义一个动物类IAnimal 接口,接口有eat、fly、swim三种活动public interface IAnimal { void eat(); void fly(); void swim();}然后我们定义鸟类Bird实现动物类IAnimal 接口public class Bird implements IAnimal{ @Override原创 2021-12-29 19:47:26 · 158 阅读 · 0 评论 -
软件架构设计原则-单一职责原则
前言单一职责是只尽量是一个类或一个方法只是负责一个职责,从而实现降低耦合的目的,接下来我们就用实际案例来解释类的单一职责首先我们有一个课程类如下public class Course { public void study(String courseName) { if("直播课".equals(courseName)) { System.out.println("在线观看,不可倒退"); } else if("录播课".equals(原创 2021-12-28 21:44:24 · 199 阅读 · 0 评论 -
软件架构设计原则-依赖倒置原则
依赖倒置包含三层含义:高层模块不应该依赖低层模块,二者都应该依赖其抽象抽象不应该依赖细节细节应该依赖抽象这就要求模块之间的依赖不直接通过实现类发生,而是通过其接口或者抽象类发生,简单来说就是面向接口编程依赖倒置可以减少类与类之间的耦合性,提高系统的稳定性案例如下:不使用依赖倒置的情况:首先如果学生Student要学习Java课程,我们新建tom类和JavaCourse类,tom对象的study方法调用javaCourse对象的startCourse方法如下Student:publi原创 2020-11-29 18:54:13 · 253 阅读 · 0 评论 -
软件架构设计原则-开闭原则
开闭原则就是在软件开发过程中对扩展开放,对修改关闭;强调用抽象构建框架,用实现扩展细节,可提高软件的可用性及可维护性;开闭原则的核心思想就是面向抽象编程比如当我们软件开发过程中,如果要更改某一功能,不需要更改原先类稳定的代码,只需要继承该类,在新的类中增加相应的修改的功能即可,案例代码如下:我们学校有许多的课程,其中有一门课程为java课程,我们需要打印出该课程的id、名称以及售价;1.为此我们新建一个接口类ICourse和实现类JavaCourse,JavaCourse实现接口ICourseIC原创 2020-11-29 14:06:13 · 147 阅读 · 0 评论