八大设计模式原则
1.依赖倒置原则
高层模块不依赖底层模块,二者都应该依赖抽象
抽象不依赖实现细节,实现细节应该依赖于抽象
这一原则与下面的针对接口编程而不是针对实现编程是一个道理,我们设计一个程序,我们应该先想好我们想要抽象什么,它应该具有什么样的能力,而不是先考虑怎么实现,这其中的具体方法,而最后在根据自己写的具体实现,从而汇总出最后的接口是什么。
2 开放封闭原则
对拓展开放,对更改封闭
类模块应该是可 拓展的,但是不可修改的。
我们应该定义好接口之后就尽可能保证接口层的稳定
3 单一职责原则
一个类应该仅有一个引起他变化的原因
变化的方向隐含类的责任
若一个类中变化的部分过多,从而加剧了程序的维护难度,从而也许会修改这个类中的接口部分,也就违反了上面的第二原则。
其中变化(使用的具体实现等等),其中一定要明确这个部分中的具体目的。
4 Liskov替换原则
子类必须能够替换他们的基类。
继承表达类型的抽象。
假如子类不可以替换他们的基类那么大部分的设计模式都无从谈起。
5 接口隔离原则
不应该“强迫”客户程序依赖他们不用的方法。
接口应该小而完备。
设计对象的时候我们应该明确的知道这个对象应该要包含什么功能,然后做出相应的接口,其余一些客户不用的方法全部隐藏起来。
6 优先使用对象组合,而不是类继承
白箱复用:将父类的全部内容暴露给子类。
黑箱复用:只暴露想暴露的部分,其余的内容对其类不可见。
***类继承*通常称为白箱复用
***对象组合*通常被称为黑箱复用
继承在某种程度上破坏了封装性,子类父类耦合度高
对象组合则只要求被组合的对象具有良好的定义的接口。
7 封装变化点
使用封装来创建对象之间的分界层,
让设计者可以在变化的另一侧修改,而不会对另一侧产生不良影响,
从而达到层次间的松耦合。
8 针对接口编程,而不是针对实现编程
不将变量类型声明为某个特定类型的具体类,而是声明为某个接口。
客户程序无需知道对象的具体类型,只需要知道对象所具有的接口。
减少系统中各部分的依赖关系,从而实现”高内聚,松耦合“的类型设计方案。
相关文章:

C++设计模式
管理变化, 提高复用 两种手段:分解 抽象 八大原则:https://blog.csdn.net/mmk27_word/article/details/108521903 重构技法: 静态 -> 动态 早绑定 -> 晚绑定 继承 -> 组合 编译时依赖 -> 运行时依赖 紧耦合 ->…...

LRU算法
#include <iostream> #include <list> #include <map> using namespace std; class LRU {struct node {int key, val;node(int k_ 0, int v_ 0) {key k_;val v_;}};public:int cap; // 大小map<int, list<node>::iterator> mp;list<node&…...
数据库事务四个特性
ACID特性 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性…...
Git入门简介
本文简单介绍一下Git的使用,主要内容有下: Git基本介绍Git相较于SVN的优势Git使用流程及常用命令 Git基本介绍 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 —— [ 百度百科 ] GitHub:https…...

《移动App测试实战》读书笔记
总的来讲,这本书基本涵盖了移动App测试的方方面面,并结合各个专题做了简单讲解,对于扩展无线端测试的知识面有极大的好处,缺点是知识点点到为止,毕竟全书300多页的篇幅也不可能对知识点进行专题讲解。书中作者提到的一…...

http load介绍
前几天工作中要对项目的接口做简单压测,就使用了http load做了简单测试,下面介绍一下这款工具的使用说明。简介:http_load是基于linux平台的性能测试工具,它体积非常小,仅100KB。它以并行复用的方式运行,可…...
工具介绍:ITerm 2
今天介绍一款终端工具ITerm2,有了它,大大提供了我们的工作效率;官方地址:http://www.iterm2.com/ 颜控首选,不多说,上图: bg图片、字体、颜色等都可以在Preferences里设置,强大&…...

shell编写图片抓取器
最近在看《Linux Shell脚本攻略》一书,书中有个图片抓取器的script,抓取出来记录一下。适用范围:适合抓取html里符合img标签正则规则的图片。 #!/bin/bash if [ $# -ne 3 ] thenecho "Usage: $0 URL -d DIRECTORY"exit -1 fi for …...

SSH免密码登录
公司服务器很多的话,如果每次连接都需要输入密码,那就太麻烦了。So,免密登录就可以大大提高我们的工作效率了。 下面介绍ssh免密登录的方法: 实现步骤: 1.在你的自己的机器下面使用ssh-keygen命令来实现创建公钥 使…...
Jmeter访问HTTPS请求
公司最近在搞全站HTTPS改造,进一步提高网站的安全性,防止运营商劫持。那么,改造完成后,所有前后端的URL将全部为https。 So ,研究下怎么用Jmeter访问https请求呢。 其实很简单, 第一步在jmeter中创建HTT…...

《Maven实战》读书笔记
之前对Maven有些认识,通过这本书《Maven实战》一起系统的回顾一下,总结的东西不会很全面,但都是日常工作中最常用的。 简介: maven翻译为“知识的积累”,基于项目对象模型(Project Object Model࿰…...

github/gitlab 管理多个ssh key
以前只使用一个 ssh key 在github上提交代码,由于工作原因,需要再添加一个ssh key在公司的 gitlab上提交代码,下面记录下配置过程,防止遗忘。 生成并添加第一个ssh key 第一次使用ssh生成key,默认会在用户~ÿ…...
解决部分国产机连不上adb shell的办法
手里头认领了公司的部分测试机,但是工作中发现部分手机连上usb后,adb devices识别不出设备。下面总结一下解决办法: 魅蓝Note2: 1.在命令行输入 system_profiler SPUSBDataType,查看连接的usb设备的信息,如下图&…...

流式断言器AssertJ入门介绍
之前一直使用Junit自带的Assert类进行断言,尽管这能满足一些我们最基础的需要,但从功能上来讲还是不够强大的。 今天介绍一款功能强大的流式断言器AssertJ,所谓的流式断言就是相较于Assert的单个校验点断言,支持一条断言语句对实…...
单元测试框架-Junit介绍
在工作中编写接口脚本中经常用到junit作为测试框架,下面总结一下junit的用法和编写规范,供大家参考。 junit简介: 基于Java语言的单元测试框架,在日常工作中被广泛运用于单元测试和接口测试。 junit官网:http://jun…...

TestNG使用总结
TestNG简介: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但同时引入了一些新的功能,使其功能更强大,使用更方便。 TestNG相较于Junit的优点: 可指定执行顺序, dependsOnMethods 属性来应对…...
基于数据驱动的接口自动化测试解决方案
总结一下我么项目中使用的基于数据驱动的接口自动化测试解决方案,仅供大家参考。1.接口框架设计结构 2.接口测试脚本设计原则 3.持续集成 这块用jenkins就可以了,就不介绍了,目前我们项目的集成规则介绍一下: 1.脚本job与应用对…...
python数据类型
重温python数据类型,重点掌握str,list,tuple及dict类型。...

Python高级特性
Python高级特性 切片迭代及迭代器列表生成式生成器 这些高级特性的作用都是一样的,为了代码的简洁、高效运行。 切片 切片让取一个list或tuple的部分元素变得相当简单, e.g: L[‘jack’,’mike’,’jerry’] 那么第一个位置,索引为0&a…...
ADB学习笔记
简介: ADB的全称为Android Debug Bridge(调试桥), 它是一个客户端-服务器端程序,其中客户端是你用来操作的电脑, 服务器端是android设备。作用显而易见,能方便我们在PC上对手机进行调试的一些工作。 原理…...
Appium简介
Appium简介 Appium is an open source, cross-platform test automation tool for native, hybrid and mobile web apps, tested on simulators (iOS), emulators (Android), and real devices (iOS, Android, Windows). 优缺点 优点显而易见,支持webview、hybri…...
Appium-java API详解
目前appium-java最新版本是5.0.0-BETA3,因此就拿最新的说明,以Java为例,首先引入java client的依赖:<dependency><groupId>io.appium</groupId><artifactId>java-client</artifactId><version&g…...

Appium学习遇到的坑
安装篇 Q1:安装时要求java运行环境为最低1.8,我原先的jdk1.7无法运行。 A1:升级jdk后解决。附appium安装教程 配置篇 Q2:运行提示error:Error: Android bootstrap socket crashed: Error: getaddrinfo ENOTFOUND lo…...

每天一个adb命令:pm 命令详解
介绍adb shell中一个很重要的命令——pm(Package Manager),这个命令主要用于获取和安装在 Android 设备上的应用信息。 关于pm命令的用法解析。命令行下输入adb shell pm即可获得关于pm的用法帮助,如下所示: usage: …...

每天一个adb命令:am 命令详解
am 这个命令可以帮助我们直接启动activity、service及广播。 adb shell am 可以查看命令的详细说明。 usage: am [subcommand] [options] usage: am start [-D] [-W] [-P <FILE>] [--start-profiler <FILE>][--sampling INTERVAL] [-R COUNT] [-S] [--opengl-tra…...
每天一个adb命令:input 命令详解
input命令可以用于向键盘发送一些指令,先看看input的官方说明: Usage: input [<source>] <command> [<arg>...]The sources are:mousekeyboardjoysticktouchnavigationtouchpadtrackballstylusdpadtouchscreengamepadThe commands an…...

每天一个adb命令:screen 命令详解
screen命令分为截屏screencap命令及录制视频screenrecord命令。 screencap命令: sage: screencap [-hp] [-d display-id] [FILENAME]-h: this message-p: save the file as a png.-d: specify the display id to capture, default 0. If FILENAME ends with .png …...

每天一个adb命令:wm命令详解
wm命令可以用于获取屏幕分辨率、像素密度等。 前提:Android4.3及以上 usage: wm [subcommand] [options]wm size [reset|WxH]wm density [reset|DENSITY]wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]wm size: return or override display size.wm density: overrid…...

每天一个adb命令:dumpsys命令详解
dumpsys是一个能帮助我们对手机进行性能分析的命令,它可以帮助我们获取电池、内存、cpu、磁盘、wifi等等信息,具体能查询的信息可以通过命令: adb shell dumpsys | grep DUMP OF SERVICE DUMP OF SERVICE DockObserver: DUMP OF SERVICE Sm…...

每天一个adb命令:monkey命令详解
国际惯例,先用adb shell monkey 看看具体用法。 具体用法 usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...][-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...][--ignore-crashes] [--ignore-timeouts][--ignore-security-exceptions][--monitor-native-cra…...

JSON相关知识点
JSON是工作中经常会遇到的一种数据结构,下面来讲讲与他相关的一些知识点。 JSON简介: JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法,类似 XML。 JSON 比 XML 更小、更快,更易解析。 JSONObj…...
markdown编写入门
什么是markdown? Markdown 是一种轻量级的「标记语言」,通过简单的标记符号来格式化排版,是文本展现的更加优美,形象。 markdown优点: 1.不像office,存在版本兼容问题,markdown无此问题&#…...
log4j学习demo
log4j简介 Log4j是Apache的一个开放源代码项目,是项目中比较常用的日志记录组件。 引入log4j <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency> log4…...
idea常用技巧收集
idea相比eclipse的优点我在这里就不赘述了,更多参考:idea官网,本文重点讲下自己在idea使用过程中常用的一些技巧,以后随时更新…… 主要分成三大块: 1. 系统设置 2. 快捷键 3. 其他设置 系统设置 主题风格设置:默…...

浅谈spring
这个话题感觉是老生常谈了,但是作为基础,我还是要沉淀一下,深刻认识。 spring核心思想 简洁的讲spring的核心思想就是两个特性:控制反转(IOC)和面向切面(AOP) 。 但是这两个概念却不太容易理解,我一开始也不太理解&…...

spring装配bean
最近在看《spring实战》一书,记录下spring装配bean这一章中自己学到的一些知识点。下面简单说明下bean和装配这两个概念的意思。 bean:在spring中代表组件,通过bean将不同的组件联系在一起。装配:是指创建应用对象之间协作关系的行…...

初识spring RestTemplate
《spring实战》读书笔记之初识spring RestTemplate。首先需要先了解下什么是REST。 REST:官方解释,表述性状态转移。 感觉还是不知所云,参考下怎样用通俗的语言解释REST,以及RESTful? 即URL定位资源,用H…...
记一次爬虫实践(一):思路及模拟登录
需求背景 因为我们的应用通常运行在h5上,因此图片格式选择了加载较快的webp格式,但是运营提起有在pc上批量下载图片(要求图片格式)的需求,目前比较麻烦,需要登录h5-找到接口中对应图片资源-一张张另存为到…...

记一次爬虫实践(二):下载图片及打包
登录之后,我们开始下载图片。 这里把完整程序po一下。 程序中用到的框架是flask,参考Flask文档 # encodingUTF-8 import zipfileimport flask import requests import os import urllib2 import time from flask import Flask, jsonifyapp Flask(__n…...

spring boot入门学习
spring boot 入门基础前言什么是spring boot?为什么要用spring boot?spring boot的常用注释有哪些?Controller层RequestMapping详解配置相关自动配置一个简单的demo实践idea如何新建spring boot项目?前言 微服务这个概念最近比较…...

常用HTML标签简介
HTML:超文本标记语言 这个没啥技术含量,这里只是简单介绍,主要是要熟能生巧。 布局相关: <!-- 标记导航 --><nav></nav> <!-- 标记侧边栏 --><aside></aside> <!-- 标记正文 --><…...

idea插件开发入门
前言:最近想研究一款自动在idea中定位缺陷及发送JIRA的快捷工具,方便提升报自动化脚本的bug的效率。因为idea插件学习是必不可少了,沉淀小结如下。 idea插件开发入门插件用途工程创建配置文件Action实现开发语法常用对象常用方法运行效果打包…...

spring boot深入及启动原理探究
围绕spring boot 的优点,本文我们来探究一下spring boot具体是如何实现这些特性的。 自动配置:针对很多Spring应用程序和常见的应用功能,Spring boot能自动提供相关配置;起步依赖:告诉Spring boot需要什么功能,它就能引…...

接口测试那些事儿
什么是接口? 首先,在讲接口测试之前,我们先要搞清楚接口类型的概念。 接口:可能是系统与系统(包括服务与服务)之间的调用,像A系统(服务)给B系统(服务&#x…...

myeclipse的一些使用技巧
一直都是看别人的博客,学习别人的心得, 但是软件行业涉及的技术太多,学过的很多东西都忘了,今天我也弄个博客玩玩, 把我所学的,工作中遇到的问题也做做记录,方便自己,也方便他人&…...

mysql重置Root密码
方法一: 在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysql mysql>use mysql; mysql>更新 user set passwordpassword(新密码) WHERE Userroot; mysql>flush privileges; 运…...

JfreeChart柱状图饼图
JfreeChart画出柱状图饼图的代码片段及详细的注释,附件为JfreeChart中文API一览表,和生成的柱状图,饼图图片 import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.C…...

自动装配的底层实现
public void autowire(Object o, Map<String, String> map) throws Exception { // 获得map 所有key Set<String> keys map.keySet(); // 获得Object中所有属性 // 获得Class对象 Class c o.getClass(); // 获得…...

java基础需要强化之关键
多线程 进程和线程的区别 ProccessBuilder 和 Runtime.getRuntime().exec java中两种线程的创建方式 extends Thread和 implements Runnable 线程的生命周期:线程创建、Runnable、Running、Blocked、dead sleep、yield、join 等方法 线程打断 interrupt 什么是守护线…...

MD5加密算法详解
注:MD5不是绝对的安全,有俩md5解决 /******************************************************************************* * keyBean 类实现了RSA Data Security, Inc.在提交给IETF 的RFC1321中的keyBean message-digest * 算法。 *****************…...