安装nacos
快速开始,在版本选择中找到稳定版,下载。截止文章发布日,最新稳定版为nacos 2.0.3
配置nacos
下载完成后,会得到压缩包,解压为nacos01
,进入nacos01/conf
目录下,可以看到如下文件:
1 | . |
快速开始,在版本选择中找到稳定版,下载。截止文章发布日,最新稳定版为nacos 2.0.3
下载完成后,会得到压缩包,解压为nacos01
,进入nacos01/conf
目录下,可以看到如下文件:
1 | . |
前面的文章中,我们说了继承,表示一种实例的泛化过程,但是在父类当中存在的都是具体的方法(即行为),实际开发中,大部分情况下,我们仅仅需要抽象出子类的行为,具体实现由子类来完成。这篇文章里,我们通过说明抽象类
和接口
,并结合例子,来实现java中如何对对象进行抽象化。
实现抽象化有两种方式一种是利用接口
:
接口被用来统一类的共通行为,当不同的类需要进行信息共享时,是不需要特别去创建类间的关系。举例来说,一个人(Human)及一只鹦鹉(Parrot)都会吹口哨(whistle),然而Human及Parrot不应该为Whistler的子类,最好的做法是令他们为Animal的子类,而他们可以使用Whistler的接口进行沟通。
引自—-维基百科
另一种是利用抽象类
:
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
引自—-百度百科
与封装类似,继承也是面向对象编程的特性之一,利用继承可以提升代码复用性,并且可以实现多态特性。
Inheritance and behavioral subtyping
It is intuitive to assume that inheritance creates a semantic “is a” relationship, and thus to infer that objects instantiated from subclasses can always be safely used instead of those instantiated from the superclass. This intuition is unfortunately false in most OOP languages, in particular in all those that allow mutable objects. Subtype polymorphism as enforced by the type checker in OOP languages (with mutable objects) cannot guarantee behavioral subtyping in any context. Behavioral subtyping is undecidable in general, so it cannot be implemented by a program (compiler). Class or object hierarchies must be carefully designed, considering possible incorrect uses that cannot be detected syntactically. This issue is known as the Liskov substitution principle.
引自—-维基百科
封装是面向对象编程的三大特性之一,java作为一门面向对象的语言,在开发过程中,进行完善的对象封装可提升软件的健壮性与可维护性。
确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。
引自—-百度百科
封装后,模块为外部程序提供若干数据访问入口,这些入口是固定,当多模块之间相互协调工作时,某模块内部发生变化,不会影响到其它外部模块。
提供外部访问入口后,模块内部将属性设置为private
,拒绝外部直接访问,对于不想对外部开放的数据,可去除get
方法,实现隐藏。
就好比你的工资卡要放到你老婆那里,日积月累,你不知道工资卡里有多少钱,当你想用钱的时候,要先跟老婆说,然后你老婆从卡里转出钱给你。而同时,为了供孩子上学,你老婆又偷偷存了一个存折,你跟你老婆要存折里的钱,你老婆也不会给你。
这里存在一个误区,很多人认为程序是人手动写出来的,不管属性设置成public
、private
,只要在写代码的时候,不去直接调用就好了。这种想法确实也没毛病,但是大部分情况下,都是团队开发,你不能保证某一天系统进行修改的时候,某个小同事会不会因为着急图省事儿,直接就访问属性去了。
利用Gitlab
、Gitlab-runner
,实现代码托管与持续集成。
1 | # yum install -y curl policycoreutils-python openssh-server cronie postfix lokkit |
1 | # curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash |
如果你够细心的话,在前面几篇文章的例子里,你可能会发现我们所添加的 css 样式,全部写入到了所生成的 index.html 当中。而我们平时的开发中,往往是将样式独立出一个 .css
文件,然后引入到项目。
实际上,这两种做法,各自有各自的优点。
首先说写入到文件里的。要知道,web资源每次请求都是要消耗网络资源的,如果是通过 URL 引用样式文件,那么用户需要等待请求完成后才能看到渲染的界面,因此,在需要的样式较少时,实际上直接卸载<style>
当中,是更好的选择,因为只需要访问页面时加载一次。
然而,当样式内容较多是时,单次相应已经不足以迅速完成,那么将样式表独立抽出较好,既方便调试、有不会产生请求的同步中断。
本篇文章将介绍如何在 webpack
打包时,抽离出独立的 css 文件,所用的项目为上一篇文章中建立的测试项目。
loader
用于对模块的源代码进行转换,在import或加载模块时,对文件进行预处理。loader
可将文件从不同的语言(如TypeScript
、sess
、或自定义语言)转换为JavaScript
(前提是你得有相应的loader
),亦可将内联图像转换为data URL
。
loader
日常开发中,常用loader
如下:
css-loader
:遍历css文件,处理样式style-loader
:将样式插入到<style></style>
标签中sass-loader
: 便利文件,解析sass
格式样式表url-loader
: 根据需求将图片自动转成base64编码,减少网络负载file-loade
:解决项目中,url
资源的引入问题(ttf、woff、eot…等)babel-loader
:添加ES6语法支持