自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SmoMark的博客

还望多多指教

  • 博客(76)
  • 收藏
  • 关注

原创 23种设计模式学习汇总

设计模式系列学习总结创建型模式简单工厂模式工厂方法模式抽象工厂模式单例模式原型模式建造者模式结构型模式适配器模式桥接模式组合模式装饰模式外观模式享元模式代理模式职责链模式命令模式职责链模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式模板方法模式访问者模式源代码请参考 设计模式...

2018-08-19 20:47:08 279

原创 设计模式——访问者模式

访问者模式介绍访问者模式提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作角色Visitor(抽象访问者):为对象结构中每一个具体元素声明一个访问操作,从该操作的名称或参数类型可以知道需要访问的具体元素的类型,具体访问者需要实现这些方法,定义对这些元素的访问操作ConcreteVisitor(具体访问者):实现...

2018-08-19 11:35:51 272

原创 设计模式——模板方法

模板方法介绍模板方法模式定义了一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变一个算法的结构的基础上重定义该算法的某些步骤角色AbstractClass(抽象类):其中定义了一系列基本操作,每个操作可以是具体的或者抽象的,每个操作代表算法的一个步骤,子类可重定义这些步骤,同时,抽象类实现了一个模板方法,用于定义了一个算法的基本框架Concre...

2018-08-19 10:21:54 301

原创 设计模式——策略模式

策略模式介绍策略模式主要目的是将算法的定义和使用分开,将每一个算法封装起来,并让他们可以相互替换角色Context(环境类):使用算法的角色,在解决某个问题时可以使用多种策略。环境类中维持了一个抽象策略类的引用实例Strategy(抽象策略类):可以是抽象类或具体类,为所支持的策略算法声明抽象方法ConcreteStrategy(具体策略类)示例代码...

2018-08-18 09:44:43 281

原创 设计模式——状态模式

状态模式介绍状态模式允许一个对象在其内部状态改变时改变他的行为,用于解决系统中复杂对象的状态转换以及不同行为下行为的封装问题角色Context(环境类):又称为上下文类,拥有多种状态的对象,其中维护了一个抽象状态类的实例State(抽象状态类):声明了各种状态对应的方法ConcreteState(具体状态类):每一个子类实现一个与环境类一个状态相关的行为,每一个具体状...

2018-08-17 22:26:39 210

原创 设计模式——观察者模式

观察者模式介绍观察者模式/发布-订阅模式/模型-试图模式/源-监听器模式/从属者模式定义了一对一以及一对多的关系,让一个对象的改变能够影响其他对象角色Subject(目标/主题):被观察的对象,定义了观察者集合ConcreteSubject(具体目标/主题):若无需扩展目标类,则可省略Observer(抽象观察者):对观察目标的改变做出反应,一般定义为接口Concr...

2018-08-17 21:49:21 212

原创 设计模式——备忘录模式

备忘录模式介绍备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可在之后将对象恢复到原先保存的状态角色Originator(原发器):将需要保存内部状态的类设计为原发器Memento(备忘录):参考原发器的实现,存储原发器的内部状态Caretaker(负责人):负责保存备忘录,不能够修改备忘录内容示例代码//原发...

2018-08-17 21:02:46 191

原创 设计模式——中介者模式

中介者模式介绍中介者模式/调停者模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的进行相互引用角色Mediator(抽象中介者):用于与各同事对象接口通信的接口ConcreteMediator(具体中介者):维持了各个同事对象的引用Colleague(抽象同事类):定义了各个同事类共有的方法,维持了一个抽象中介者类的引用ConcreteCollea...

2018-08-17 19:52:25 189

原创 设计模式——迭代器模式

迭代器模式介绍迭代器模式提供一种方法来访问聚合对象,而不用暴露对象的内部结构,其别名称作游标(Cursor)角色Iterator(抽象迭代器):定义了访问和遍历元素的接口ConcreteIterator(具体迭代器):实现了抽象迭代器接口,完成对聚合对象的遍历,通过游标记录在聚合对象中所处的当前位置Aggregate(抽象聚合类):存储和管理对象元素,声明了creat...

2018-08-17 17:06:01 208

原创 Spring——核心

Spring——核心Spring关键策略基于POJO的轻量级和最小侵入性编程通过依赖注入和面向接口实现松耦合基于切面和惯例进行声明式编程通过切面和模板减少样板式代码Spring容器BeanFactoryApplicationContext区别:BeanFactory在加载Bean的时候是延迟加载,需要时才加载(不能及时发现问题)而Applica...

2018-08-15 11:49:42 207

原创 设计模式——职责链模式

职责链模式介绍职责链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接受请求,将这些对象连接成一条链,并且沿着这条链传递请求,知道有对象处理为止角色Handler(抽象处理者):一般设计为抽象类,定义了处理请求的接口和一个抽象处理者类型的对象作为对下家的引用ConcreteHandler(具体处理者):实现了抽象处理者定义的抽象处理请求方法,在处理之前需要判断是...

2018-08-15 09:20:20 226

原创 设计模式——命令模式

命令模式介绍命令模式/动作模式/事务模式:将一个请求封装成请求对象,从而可以让我们用不同的请求对客户进行参数化角色Command(抽象命令类):一般是接口或者抽象类,其中声明了用于执行请求的方法ConcreteCommand(具体命令类):抽象命令类的子类,实现了其中声明的方法,对于具体的接收者,将接收者的动作绑定其中Invoker(调用者):请求发送者,通过命令对象...

2018-08-15 09:18:38 189

原创 设计模式——代理模式

代理模式介绍代理模式用于提供一个代理对象,并由代理对象控制对原对象的访问角色Subject(抽象主题角色):声明了真实主题和代理主题的共同接口Proxy(代理主题角色):包含对真实主题的引用,提供与真实主题相同的接口;通常在代理对象中客户端在调用所引用的真实对象方法之前或之后还需要执行某些操作RealSubject(真实主题角色):实现了真实的操作业务示例代...

2018-08-14 20:02:31 204

原创 设计模式——享元模式

享元模式介绍享元模式通过共享技术从而实现相同或者相似的对象的重用,从而达到降低系统开销的目的,一般与工厂模式结合使用,包含一个享元工厂类内部状态内部状态是指存储在享元模式内部并且不会随环境改变而改变的状态,内部状态可以共享外部状态外部状态是随环境改变而改变的不可以共享的状态,通常由客户端进行维护,在需要使用的时候传入到内部角色Flyweight(抽象享元...

2018-08-14 20:01:37 225

原创 设计模式——外观模式

外观模式介绍外观模式/门面模式通过引入一个外观类,为子系统的一组接口提供一个统一的入口角色Facade(外观角色):将所有客户端的请求转发到相应的子系统中SubSystem(子系统角色):处理外观类传过来的请求示例代码//子系统Apublic class SubSystemA { public void methodA() { ...

2018-08-14 20:00:50 248

原创 设计模式——装饰模式

装饰模式——扩展系统功能介绍装饰模式是一种用以替代继承的技术,使用对象的关联关系取代继承关系,通过引入装饰类,在装饰类中既可以调用待装饰的原有类的方法,也可以增加新的方法已达到扩充功能的目的角色Component(抽象构件):具体构件和抽象抽象装饰类的公共父类ConcreteComponent(具体构件):抽象构件的子类,实现了抽象构件中定义的方法,装饰器可以给它增加额...

2018-08-12 22:29:18 167

原创 设计模式——组合模式

组合模式介绍组合模式/整体-部分模式主要用于处理树形结构。组合模式对单个对象(叶子对象)和组合对象(容器对象)的使用具有一致性。角色Component(抽象构件):可以是接口或者抽象类,为叶子构件和容器构建声明接口和公共方法并提供管理子构件的方法,客户端针对抽象构件进行编程Leaf(叶子构件):实现了抽象构建中声明的行为Composite(容器构件):包含一个存储子节...

2018-08-12 17:12:05 193

原创 设计模式——桥接模式

桥接模式桥接模式如果某个类存在两个独立变化的维度,通过桥接模式可以使两个维度分离出来,使二者可以独立扩展角色Abstraction(抽象类):定义了抽象类的接口,一般使用抽象类而不是接口实现,其中定义并维护了一个Implementor(实现类接口)对象RefinedAbstraction(扩充抽象类):扩充Abatraction所定义的接口,一般情况下是具体类,实现了A...

2018-08-12 14:50:14 275 1

原创 设计模式——适配器模式

适配器模式介绍适配器模式中引入了适配器的包装类,而它所包装的对象称为适配者,即被适配的类。适配器的实现就是把客户端的请求转化为对适配者的相应的接口的调用,即:当客户端调用适配器的方法时,在适配器的内部调用适配者的方法,而该过程对客户端来说是透明的。角色Target(目标抽象类):定义了客户端所需要的接口,其中目标抽象类可以是接口,抽象类或具体类Adapter(适配器类)...

2018-08-12 14:11:47 260

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

建造者模式介绍建造者模式/生成器模式:建造者模式为客户端返回的不是一个简单的产品,而是一系列部件的组合角色Builder(抽象建造者):为创建一个产品的各个部件提供接口。在该接口中一般声明创建各个部件的方法和返回复杂对象的方法ConcreteBuilder(具体建造者):实现抽象建造者声明的方法Product(产品角色):被构建的复杂对象,包含一系列部件Dire...

2018-08-11 21:26:59 180

原创 设计模式——原型模式

原型模式介绍原型模式:使用原型实例指定创建对象的种类,通过拷贝原型创建新的对象。需要注意的是,通过克隆产生的新的对象与原对象之间没什么关联,二者之间拥有不同的地址。创建克隆对象的工厂就是原型本身,工厂方法由克隆方法来实现。角色Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类ConcretePrototype(具体原型类):实现在抽象原型中...

2018-08-11 20:58:56 162

原创 设计模式——单例模式

单例模式实现方法构造函数私有自行创建实例通过公共静态方法像类外提供该实例示例代码(单线程)//单线程中的单例模式public class SingleThreadSinglePattern { private static SingleThreadSinglePattern tm = null; //构造方法私有化 private S...

2018-08-11 17:44:32 171

原创 设计模式——抽象工厂模式

抽象工厂模式背景工厂方法模式虽然解决了简单工厂模式存在的工厂职责太重的问题,但是产生了另一个问题,即工厂数量太多。因此,我们考虑把一些相关的产品组成一个产品族,由工厂方法模式的工厂与产品一对一关系转变为抽象工厂模式的工厂与产品一对多的关系。介绍抽象工厂模式中的工厂与产品是一对多的关系。提供一个创建一系列相关或相互依赖的产品的接口,而无需指定他们的具体的类。在抽象工厂模式中,...

2018-08-11 13:37:55 186

原创 设计模式——工厂方法模式

工厂方法模式(Factory Method Pattern)背景简单工厂模式虽然简单,但是存在一个严重的问题,当有新的产品时,需要更改工厂类的代码,从而违反了开闭原则,而工厂方法模式应运而生。介绍工厂方法模式/虚拟构造器模式/多态工厂模式:针对不同的产品提供不同的工厂。定义一个用于创建对象的接口,让子类决定哪一个类被实例化。将类的实例化过程延迟到子类。角色Pr...

2018-08-10 22:33:27 138

原创 设计模式——简单工厂模式

设计模式面向对象设计原则单一职责原则接口隔离原则依赖倒转原则里氏代换原则合成复用原则开闭原则迪米特法则简单工厂模式/静态工厂模式(Simple Factory Pattern/Static Factory Pattern)简单工厂模式:定义一个工厂类,他可以根据参数的不同返回不同的实例,被创建的实例通常都具有相同的父类。角色Factory(...

2018-08-10 22:32:23 223

原创 Python爬虫——Scrapy中使用IP池和用户代理池

Python爬虫——Scrapy中使用IP池和用户代理池本文使用的版本为Python3settings.py中配置IP池和用户代理池# IP池设置IPPOOL = [ {"ipaddr": "101.236.21.22:8866"}, {"ipaddr": "101.126.18.101:8866"}, {"ipaddr": "118.31.220.3.

2018-07-31 17:00:38 11965 2

原创 Python爬虫——开启日志

Python爬虫——开启日志本文使用的版本为Python3,使用的IDE为Pycharm示例代码# 开启DebugLoggerfrom urllib import requesthttphd = request.HTTPHandler(debuglevel=1)httpshd = request.HTTPHandler(debuglevel=1)opener = req...

2018-07-30 15:29:20 1225 1

原创 Spring Cloud——RabbitMQ消息中间件

Spring Cloud——RabbitMQ消息中间件(本文只作为学习记录)官网下载安装RabbitMQ,启动服务,浏览器输入localhost:15672进入管理界面,账号密码默认都是guest新建Spring Boot项目,pom.xml 添加 spring-boot-starter-web 和 spring-boot-starter-amqp依赖(parent节点中的版本建...

2018-07-30 14:12:24 941

原创 Spring Cloud——Config Client

Spring Cloud——Config Client(本文只作为学习记录)首先要运行前文提到的Config Server配置中心新建Spring Boot项目,导入spring-boot-starter-web和spring-cloud-starter-config依赖新建 bootstrap.yml文件用于替换application.properties文件,代码如下:...

2018-07-30 10:38:35 275

原创 Python多线程

Python多线程本文使用的版本为Python3,使用的IDE为Pycharm导入threading创建类继承自threading.Thread重写run()方法示例代码:# 多线程Demo# 导入模块import threadingclass A(threading.Thread): def __init__(self): threadi...

2018-07-29 22:30:18 132

原创 Python爬虫——爬取京东手机图片实战

Python爬虫——爬取京东手机图片实战本文使用的版本为Python3,使用的IDE为Pycharm请先在对应位置建立好文件夹(本示例为D:\JingDong\)示例代码如下:# 爬取京东手机图片import refrom urllib import requestdef craw(url, page): # 获取数据 html1 = request....

2018-07-29 22:03:17 1120

原创 Python爬虫——使用Cookie

Python爬虫——使用Cookie本文使用的版本为Python3,使用的IDE为Pycharm示例代码如下:# 使用Cookie Demo# 导入模块from urllib import request, parse, errorfrom http import cookiejar# 此处为某网站登陆URLurl1 = ""# 填充数据postdata = pa...

2018-07-29 21:49:59 449

原创 Python爬虫——使用代理IP

Python爬虫——使用代理IP本文使用的版本为Python3,使用的IDE为Pycharm使用代理IP爬取百度首页首先需要获取代理IP地址,可以从该 网站 获取,同时选择验证时间尽量短的示例代码如下:# 使用代理IP爬取百度首页# 定义使用代理IP函数def use_proxy(proxy_addr, url): from urllib import req...

2018-07-29 19:57:12 1912

原创 Python爬虫——Post请求示例

Python爬虫——Post请求示例本文使用的版本为Python3,使用的IDE为Pycharm点击此处访问 测试链接右键测试链接,查看源代码,发现两个字段分别为:name, pass示例代码:# urllib Post Demo# 测试链接:http://www.iqianyue.com/mypost/# 导入模块from urllib import request,...

2018-07-29 16:39:50 2891

原创 Python爬虫——Get请求示例

Python爬虫——Get请求示例本文使用的版本为Python3,使用的IDE为Pycharm模仿百度搜索from urllib import request# 伪装成浏览器headers = ("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Ge...

2018-07-29 16:24:40 463

原创 Python爬虫——urllib的使用

Python爬虫——urllib的使用本文使用的版本为Python3,使用的IDE为Pycharm爬取百度首页# 导入模块from urllib import request# 伪装成浏览器headers=("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ...

2018-07-28 23:41:17 372

原创 Java学习笔记04

Java学习笔记04volatile关键字只能保证可见性,不能够保证原子性。但是jvm在操作long和double型变量的时候,若该变量使用volatile修饰,则jvm会保证对变量的操作是原子性的。wait()方法最好是放在循环里而不是If里面,因为该线程获得CPU运行的时候,可能其他条件尚未满足,以下为示例代码:// The standard idiom for using th...

2018-07-28 16:56:51 112

原创 Java学习笔记03

Java学习笔记03执行wait()方法之后,当前线程会释放锁wait()和notify()都要在同步方法或者同步代码块中调用,若在调用notify()时没有持有锁则会抛出IllegalMonitorStateException异常。执行notify()时若有多个线程在等待,则由线程规划器随机选择s一个线程对其发出notify通知执行notify()的线程不会立即释放锁,而是在执行完同...

2018-07-28 12:21:16 113

原创 NIO——概述

NIO——概述核心部分Channels(类似于stream,区别在于stream是单向的,channel是双向的)Buffer(缓存区,读取数据一定要经过缓存区)Selctors(允许单线程处理多个channel)channel实现FileChannel(用于文件)SockerChannel(用于网络编程socket)ServerSocketChannel(用...

2018-07-24 16:49:54 152

转载 RabbitMQ深入理解及其使用

(转载)原文直达链接: https://www.jianshu.com/p/79ca08116d57

2018-07-24 15:55:10 842

空空如也

空空如也

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

TA关注的人

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