- 博客(82)
- 资源 (8)
- 收藏
- 关注

原创 鸿蒙开发工具DevEco Studio的安装及第一个HelloWorld展示
DevEco Studio下载地址https://developer.harmonyos.com/cn/develop/deveco-studionotejs下载地址:https://nodejs.org/zh-cn/使用DevEco Studio需要先安装和配置notejs,如果有安装和配置notejs可以跳过此步骤notejs安装与配置notejs安装下载notejs双击node-v8.11.3-x64.msi安装点击next后,勾选I accept…,点击next选择安装地址,最
2020-09-24 22:02:38
10537
17
原创 关于手写实现Spring注解实现自定义配置功能
前言我们在使用Spring中,常常使用注解来进行配置,例如用@Controller来注解这个类为控制器类,用@Service来注解这个是Service层类,@Autowired来表示对象注入,@RequestParam来表示对象为一个参数等等,那这些功能在Spring中是怎么实现的呢,我们就手动来实现一下配置准备配置application.properties我们需要在根目录下准备一个application.properties文件,并且里面写上scanPackage=com.mvcframewor
2022-01-20 22:17:18
1132
原创 Spring源码构建
前期准备JDK为1.8以上版本首先需要JDK升级到1.8以上的版本Spring源码下载并解压然后需要下载Spring源码,源码地址:https://github.com/spring-projects/spring-framework/archive/v5.0.2.RELEASE.zip,下载完成后解压到相应目录Gradle下载安装下载并解压由于从Spring5开始都采用Gradle编译,所以构建源码钱需要先安装Gradle,本次源码推荐使用Gradle版本为Gradle 4.0,下载地址为
2022-01-16 11:26:39
557
原创 观察者模式实现原理
前言观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主题对象,当主题对象发生变化时,它的所有观察者都会收到通知并作出相应的动作。观察者模式又叫发布订阅模式,需要观察者对被观察者发布的的动作进行订阅。实现主要类我们新建的这几个类中,Event是事件类,用于包装触发事件的相关信息;MouseEventType接口中定义了各种事件类型;EventLisenter是监听器类,它是观察者的桥梁;Mouse是被观察者类,当它作出动作时,观察者就会反应并作出相应动作。MouseEventCa
2022-01-15 19:04:02
1579
原创 装饰者模式案例
前言装饰者模式是指在不改变原有对象的基础上,将功能附加在对象上,提供了比继承者更有弹性方案。案例在现实生活中,我们买车一般有基础配置、中配、高配等,在这里我们就可以应用装饰者模式来这种情况进行描述创建车辆接口首先我们创建一个车辆接口,里面有两个方法,分别用于获取描述信息以及价格ICarpublic interface ICar { public String getMsg(); public int getPrice();}创建基础版车NormalCardpublic
2022-01-15 09:52:22
343
原创 适配器案例
前言适配器模式是指将一个类的接口转换成用户期望的另一个接口,是原本接口不兼容的类可以一起工作,属于结构型设计模式。适配器模式最长引用的案例就是电压转换头案例我们在显示生活中的民用电一般是220V交流电,但是我们手机使用的一般是5V的直流电,所需想要给手机充电就需要用到电源适配器来讲220V交流电转换为5V直流电创建220V交流电类220V交流电类,输出220V方法AC220public class AC220 { public int outputAC220V() {
2022-01-13 21:05:17
224
原创 利用模板模式重构JDBC操作业务场景
前言模板模式是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。JDBC操作业务是运用模板模式一个很典型的场景,下面我们就利用模板模式重构JDBC操作业务场景案例我们以查询为例,首先我们定义一个RowMapper接口,这个接口定义了mapRow方法,用于实现实体关系映射RowMapper:public interface RowMapper<T> { T mapRow(ResultSet rs,int rowNum) throws Exception;}接下来,
2022-01-11 20:36:25
241
原创 策略模式的使用
前言策略模式是指定义了算法家族并分别分装起来,让他们之间可以互相替换,使得算法的变化不会影响使用算法的用户策略模式最常用的场景是一个系统需要动态地在集中算法中选择,例如支付场景,接下来我们就以支付场景为里来解释策略模式案例定义支付抽象类Payment首先我们定义支付抽象类Payment :public abstract class Payment { public abstract String getName(); protected abstract double quer
2022-01-09 20:42:55
677
原创 委派模式详解
前言委派模式的基本作用就是负责任务的调用和分配案例显示中,一般公司都是老板给项目经理下达任务,项目经理根据具体情况给相应员工派发任务,所以可以用代码来实现首先,我们新建员工接口IEmployeepublic interface IEmployee { public void doing(String command);}然后新建两种员工类型EmployeeA :public class EmployeeA implements IEmployee { @Override
2022-01-09 16:26:35
410
原创 代理模式详解
代理模式详解前言静态代理动态代理JDK实现方式定义代理类定义接口实现接口测试CGlib方式的动态代理引入CGlib新建代理类新建目标类测试前言代理模式在软件开发中经常用到,它是指为对象提供一种的代理,以控制对这个对象的访问。代理模式主要有两个目的:一是保护目标对象,二是增强目标对象。代理模式主要有两种:静态代理和动态代理,接下来,我们就用实际例子来解释静态代理静态代理实现很简单,就是客户端不直接使用目标对象方法,而是调用代理对象方法,而代理对象方法里面调用目标对象,同时在其前后做相应的增强显示生活
2022-01-09 14:18:08
499
原创 原型模式中的深克隆和浅克隆
前言原型模式是指原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。在原型模式中,我们涉及到浅克隆和深克隆这两个概念,浅克隆中引用对象仍然指向原来的对象,深克隆则指向新的对象,下面我们就用案例来解释案例我们新建两个类,课程类和视频类,每个课程都有相应的视频Video :public class Video implements Serializable { private String videoName;}Course :public class Course imp
2022-01-05 22:00:21
280
原创 单例模式详解
前言单例模式是确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。实际业务中如J2EE里的ServletContext,Spring中的ApplicationContext等都是单例模式饿汉式单例模式饿汉式单例模式在类加载的时候就立即初始化,并且创建单例对象。public class HungrySingleton { private static final HungrySingleton hungrySingleton = new HungrySingleton();
2022-01-03 20:41:42
524
原创 关于简单工厂模式、工厂方法模式和抽象工厂模式的解析
文章目录前言简单工厂模式创建ICourse接口实现ICourse接口创建工厂类测试工厂方法模式创建课程类接口创建具体实现课程类创建工厂类接口创建具体工厂类测试抽象工厂模式创建笔记和视频接口具体JAVA的笔记和视频创建工厂类接口Java课程工厂实现类测试前言简单工厂模式是由一个工厂对象来决定创建哪一种产品类的实例工厂方法模式是特定类的工厂决定生产这个类的实例抽象工厂模式是由工厂创建一系类的类下面我们就用实际案例来具体解释简单工厂模式创建ICourse接口在案例中我们新建ICourse接口,并
2022-01-03 14:35:11
491
原创 关于JDBC操作数据的演进(从最基础方式到JDBCTemplate)
文章目录前言前期准备原始操作数据库方式创建实体类创建DAO类测试改进1改进2新建db.properties改造JdbcUtils改进3创建模板类JdbcTemplate调用模板类方法改进4创建IRowMapper接口创建StudentRowMapper改造JdbcTemplate改造StudentDao改进5改造IRowMapper改造JdbcTemplate前言在项目中,对数据库进行操作是我们非常重要的一个工作部分,此时我们通常不会使用最原始的数据库操作方法,而是使用一些包装好的中间件来进行数据库操作
2022-01-03 09:50:26
875
原创 软件架构设计原则-合成复合原则
前言合成复合原则要求我们在软件设计中尽量使用对象组合和聚合而不是集成关系达到软件复用的目的,这样可以使系统更加灵活,降低类与类的耦合度。典型案例在软件开发过程中,我们常常会使用到数据库,接下来我们就以数据库连接做一下简单的示例首先,我们新建一个数据库连接类DBConnectionpublic class DBConnection { public String getConnection() { return "MySql数据库连接"; }}然后我们新建一个产
2022-01-02 09:11:07
638
原创 软件架构设计原则-里氏替换原则
前言里氏替换原则简单的理解可以是父类用到的地方可以用子类替换并且不改变逻辑,这就要求子类可以扩展父类的功能,但不能改变父类原有的功能。里氏替换原则要求(1) 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法,(2) 子类可以增加自己特有的方法(3) 当子类的方法重载父类的方法时,方法的入参要比父类方法的入参更宽松,但返回值要比父类更严格接下来我们就用一个案例来解释案例在生活中,有矩形和正方形,正方形是长宽相等的矩形,所以我们新建这样两个类public class Rectanger {
2021-12-31 20:32:56
454
原创 软件架构设计原则-迪米特原则
前言迪米特原则是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则,尽量降低类与类之间的耦合度。接下来,我们就以实际案例来说明案例我们有一个系统,其中有Course课程类,Leader领导类,Boss老板类;其中leader可以统计雇员人数,老板可以通过Leader获得雇员人数如下:public class Course {}public class TeamLeader { public void checkNumberOfCourses(List<Course>
2021-12-30 21:12:01
2146
原创 软件架构设计原则-接口隔离原则
前言接口隔离原则是指用多个专门的接口,而不适用单一的总接口,接下来,我们一个实际的案例来解释案例首先我们定义一个动物类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
187
原创 软件架构设计原则-单一职责原则
前言单一职责是只尽量是一个类或一个方法只是负责一个职责,从而实现降低耦合的目的,接下来我们就用实际案例来解释类的单一职责首先我们有一个课程类如下public class Course { public void study(String courseName) { if("直播课".equals(courseName)) { System.out.println("在线观看,不可倒退"); } else if("录播课".equals(
2021-12-28 21:44:24
233
原创 HTML5中indexedDB存储离线数据示例
简介indexedDB是HTML5 推出的一种轻量级的NoSQL数据库,具有易扩展、快速读写、成本低廉等特点使用var request = indexedDB.open('Html5IndexedDB',2);//创建一个数据库request.onerror = function(e) { console.log(e);}//监听错误事件request.onupgradeneeded = function(event) { var db = event.target.result; var
2021-12-04 10:30:25
1014
原创 鸿蒙开发工具DevEco Studio中设置方法带参数注释快捷键
前言以前我在使用eclipse开发的时候,常常喜欢使用shift+alt+J来对方法或者变量进行注释,用来解释方法或者变量的含义,但是我在鸿蒙开发工具DevEco Studio使用这个快捷键并没有这样的效果于是我打算对其进行快捷键的配置DevEco Studio配置注释快捷键点击file->settings弹出相应窗口在这个窗口上左边选择Keymap,然后右边搜索中输入comment,然后就会有各种带comment的功能快捷线出现,然后我们选择other->Fix doc comm
2021-06-08 21:24:47
2912
3
原创 鸿蒙系统中的AdaptiveBoxLayout自适应盒子布局
前言AdaptiveBoxLayout是自适应盒子布局,该布局提供了在不同屏幕尺寸设备上的自适应布局能力,主要用于相同级别的多个组件需要在不同屏幕尺寸设备上自动调整列数的场景。该布局中的每个子组件都用一个单独的“盒子”装起来,子组件设置的布局参数都是以盒子作为父布局生效,不以整个自适应布局为生效范围。该布局中每个盒子的宽度固定为布局总宽度除以自适应得到的列数,高度为match_content,每一行中的所有盒子按高度最高的进行对齐。该布局水平方向是自动分块,因此水平方向不支持match_conte
2021-06-06 09:37:58
788
原创 鸿蒙实现拖拽组件的功能
文章目录前言准备实现拖拽功能前言对于拖拽功能,我们需要用到的是DraggedListener准备首先我们新建一个页面用于实现拖拽的功能然后弹窗中输入页面名称将页面的slice定义到MainAbility中public class MainAbility extends Ability { @Override public void onStart(Intent intent) { super.onStart(intent); super.se
2021-06-05 14:53:47
1996
5
原创 Harmony中PositionLayout确切位置布局
前言在PositionLayout中,子组件通过指定准确的x/y坐标值在屏幕上显示。(0, 0)为左上角;当向下或向右移动时,坐标值变大;允许组件之间互相重叠。
2021-06-05 10:31:40
636
4
原创 鸿蒙系统中StackLayout帧布局
文章目录前言前期准备创建页面StackLayout的使用定义布局定义子组件组件对齐场景展示前言StackLayout直接在屏幕上开辟出一块空白的区域,添加到这个布局中的视图都是以层叠的方式显示,而它会把这些视图默认放到这块区域的左上角,第一个添加到布局中视图显示在最底层,最后一个被放在最顶层。上一层的视图会覆盖下一层的视图StackLayout所包含组件可支持的XML属性见下表:参考文档:https://developer.harmonyos.com/cn/docs/documentation/
2021-06-02 22:06:06
4919
9
原创 鸿蒙系统中的TableLayout网格布局
文章目录前言前期准备创建页面tableLayout的使用定义布局定义text组件的样式定义text组件模拟器显示如下:设置行数和列数前言TableLayout是使用表格的方式划分子组件TableLayout的自有XML属性见下表参考文档:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-layout-tablelayout-0000001060379893下面我们就以案例来展示其应用前期准备我们还
2021-06-02 21:23:15
744
1
原创 鸿蒙系统中DirectionalLayout线性布局
鸿蒙系统中DirectionalLayout线性布局前言前期准备新建项目新建线性布局页面排列方式垂直排列水平排列对其方式权重前言DirectionalLayout布局用于将一组组件(Component)按照水平或者垂直方向排布,能够方便地对齐布局内的组件。DirectionalLayout的自有XML属性以及所包含组件可支持的XML属性如下参考文档https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-l
2021-06-01 22:15:18
1776
4
原创 ionic5 路由跳转、跳转传值、返回上一页、返回到根
文章目录准备普通路由跳转路由跳转传值数值传递数值获取NavController 返回上一页使用NavController的back方法实现返回多次跳转返回问题及解决问题解决多个页面跳转到同一个页面的返回问题及解决问题返回到根准备我们在cmd中使用ionic start ionicdeme08 tab新家一个tab类型的项目普通路由跳转普通的路由跳转我们只需要用到routerLink就可以了首先我们新建一个页面ionic g page pinfopinfo.page.html:<io
2021-05-16 12:05:50
2276
原创 ionic5 ion-refresher下拉更新
前言在现实应用中,我们需要有上拉更新,通过上拉的操作触发请求事件,请求最新的数据进行加载,这里我们使用到的组件就是ion-refresher,参考资料如下:https://ionicframework.com/docs/api/refresher接下来,我们就从案例中来学习这样一个组件使用新建项目cmd中我们使用ionic start ionicdemo7来新建项目页面新建列表我们在ts中新建一个数组,并予以赋值,然后在页面中显示出来tab1.page.ts:tab1.page.
2021-05-15 22:29:39
288
原创 ionic5 实现请求数据以及上拉加载更多功能
get请求数据Angular5.x以后get、post和服务器交互使用的是HTTPClientModule模块,所以首先我们需要引入HttpClientModule模块在app.module.ts中引入HttpClientModule并注入app.module.ts:引入HttpClientModule注入HttpClientModule新建get请求的service服务我们把实现get请求的功能整合到一个service里面,然后需要用到get请求的时候调用service相应的方法新建s
2021-05-15 18:42:24
416
2
原创 ionic5 上拉分页加载更多ion-infinite-scroll
在我们使用软件的时候,尤其是列表类型,常常一次性不会展示所有的内容,只有当我们上拉到最底下的时候生成转圈动态图,同时会发送请求数据,从而显示更多的信息,这时候就需要用到上拉分页加载跟多的组件ion-infinite-scroll参考资料https://ionicframework.com/docs/api/infinite-scroll下面我们在利用案例来实现这一功能准备新建项目我们使用ionic start ionicdemo06创建项目新建列表我们首先在ts中新建list数组变量,然
2021-05-14 21:07:10
569
3
原创 ionic5 中一个页面弹出另一个页面以及页面间的传值
前言要实现一个页面弹出另一个页面我们需要用到modal,参考资料:https://ionicframework.com/docs/api/modal下面我们用实际案例来验证这个功能准备新建modal页面ionic g page modal新建login组件ionic g component modal/components/login在tab1页面新建按钮链接到modal<ion-button [routerLink]="['/modal']"> 跳转到模态对话
2021-04-30 22:42:09
405
2
原创 ionic5中手势相关事件的使用
文章目录前言准备使用tap(点击)、press(按下)安装hammerjs在项目的src/main.ts中引入hammerjs在app.module.ts中引入HammerModule测试前言ionic5中的gestures手势事件包括:tap(点击)、press(按下)、pan(随着手指移动)、swipe(随着手指迅速移动)、rotate(旋转)、pinch(缩放)等准备首先我们在项目中新建一个页面用于演示手势的运用ionic g page gestures在tab1中新建按钮链接到ges
2021-04-28 21:41:56
651
2
原创 ionic5中actionSheet、toast、alert、loading等的使用
文章目录上拉菜单actionSheet 的使用新建页面新建按钮并添加点击事件ts中引入ActionSheetController并声明定义showAction方法不同平台显示效果Toast 提示框新建页面新建按钮并添加点击事件ts中引入ToastController 并声明ts中新建相应方法loading加载样式新建页面新建按钮并添加点击事件ts中引入loadingController并声明ts中新建相应方法alert弹窗新建页面新建按钮并添加点击事件ts中引入AlertController并声明ts中新建
2021-04-27 22:38:59
1035
原创 ionic5 中组件内置颜色、自定义组件样式
准备我们使用ionic start ionicdemo04来新建一个项目我们使用ionic g page button来创建一个页面来测试内置颜色和自定义组件样式项目结构如下:接下来我们就在tab1页面上定义一个按钮用于跳转到button页面tab1.page.html<ion-button [routerLink]="['/button']"> 跳转到button页面</ion-button>默认颜色的使用ionic中有很多内置颜色可供选择,省去了
2021-04-24 09:47:09
902
原创 ionic5 侧边栏ion-menu组件以及底部tabs结合侧边栏ion-menu
文章目录说明侧边栏ion-menu组件的基本使用新建项目侧边栏ion-menu使用点击菜单按钮弹出侧边栏侧边栏ion-menuJS实现侧边栏打开功能页面加按钮给ion-menu定义menuId属性控制菜单的页面中引入MenuController 组件初始化构造函数对应方法中通过JS控制侧边栏底部tabs结合侧边栏ion-menu新建tab项目新建页面新建侧边栏给侧边栏菜单添加链接并使其点击后侧边栏关闭说明对于侧边栏的相关的相关使用可以参考文档https://ionicframework.com/docs
2021-04-22 22:12:47
885
原创 ionic5 中的日期组件ion-datetime
准备首先我们在项目中使用ionic g page datetime创建一个测试日期组件的页面然后,在tab1页面创建一个用于跳转到这个页面的按钮 <ion-button [routerLink]="['/datetime']"> 跳转到datetime页面 </ion-button>关于日期组件的使用可以参考文档https://ionicframework.com/docs/api/datetime日期组件默认样式我们在页面上使用ion-datetime
2021-04-20 21:57:52
1959
鸿蒙系统数字消消乐
2021-06-12
ionicdemo04.zip
2021-04-24
ionic5配置需要的工具.zip
2021-03-14
struts项目所需包
2017-12-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人