5 程序猿进阶

尚未进行身份认证

目前在杭州市工作,希望能够找到一群志同道合的兄弟,一起创业。

等级
TA的排名 2w+

设计模式——中介者模式

在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,班长和团支书等干部需要记住同学们的电话,且同学中如果有人的电话修改了,需要告诉所有干部,自己的手机号修改了,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”...

2019-08-18 21:27:47

设计模式——观察者模式

生活中,许多事物不是单独存在的,其中一个事物发生变化可能会导致一个或多个其他事物的行为也发生变化。例如:公众号的博主与用户之间(每当推送一篇文章,我们就能被动的接收到一篇文章,前提是你关注了它)。在软件设计中也是一样,例如:MVC模式中的模型与视图的关系。此类场景使用观察者模式来实现的话,就非常方便。一、观察者模块的定义与优缺点观察者模式(ObserverPattern):定义对...

2019-08-18 15:30:46

Redis 常用配置

【1】Redis默认不是以守护进程的方式运行,可以通过修改配置项启用守护线程:修改前:daemonizeno修改后:daemonizeyes【2】当Redis以守护进行方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定:PID就是各进程的身份标识pidfile/var/run/redis.p...

2019-08-17 20:38:54

设计模式——迭代器模式

在程序设计中,经常需要访问一个聚合对象中的各个元素,例如:我们使用list存储元素,通常的做法是将list的创建和遍历放在同一个类中。但这种方法不利于扩展,如果将存储方式更改为数组时,就需要更换迭代方式。违背了“开闭原则”。“迭代器模式”能较好的克服以上缺点,它在客户访问类与聚合类之间插入一个迭代器,这分离了聚合对象与遍历行为,对客户也隐藏了其内部细节,满足“单一职责原则”和“...

2019-08-17 00:03:42

设计模式——访问者模式

在开发中,有些集合存在多种不同的对象实例(例如:男人、女人),且每个对象也存在多种不同的访问者或处理方式(性格:暴躁、温和)。这样的例子还有很多,例如:好声音节目中不同评委,以及评委对他们的评价的选项,等等。这些被处理的数据元素相对稳定,而访问方式多种多样的数据结构,如果使用“访问者模式”来处理比较方便。访问者模式能把处理方法从数据结构中分离出来,并可以根据需要增加新的处理方式,且不用修改原...

2019-08-15 22:11:04

设计模式——命令模式

软件开发中,通常会存在“方法的请求者”与“方法的实现者”之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。特别是针对行为进行(撤销、重做、记录)一系列操作时很不方便,因此“如何将方法的请求者与方法的实现者解耦”,是命令模式的主要任务和功能。在现实生活中,这样的例子也很多,例如,电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者)一、命令模式的基本介绍...

2019-08-13 22:28:39

设计模式——模板模式

在面向对象程序设计过程中,程序员常常会遇到如下情况:设计一个系统时知道算法所需的关键步骤,且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如:去医院看病一般都要经历以下流程:挂号、排队、就诊、取药等,其中挂号和排队对每个客户都是一样的,可以在父类中实现,但是就诊和取药是因人而异的。可以延迟到子类中实现。我们把这些规定了流程或格式的实例定义成模板,允...

2019-08-12 21:28:37

设计模式——代理模式

在现实生活中,一个对象不能直接访问另一个对象,这时需要找中介来访问目标对象,此时的中介就是代理对象。例如:租房子时,我们无法与房东取得联系,只能通过某网站与中介进行交易,获取自己心仪的房间等等。在软件设计中,使用代理模式的例子也很多,例如:访问阿里的maven仓库,其就是海外maven仓库的代理。还有因为安全原因需要屏蔽客户端直接访问真是对象,如某单位的内部数据等。一、代理模式基本...

2019-08-11 17:26:42

设计模式——享元模式

享元模式(FlyweightPattern):主要用于减少创建对象的数量,以减少内存占用和提高性能。在面向对象程序的设计过程中,有时需要创建大量相似的对象实例。如果都创建将会消耗很多系统资源,它是系统性能提高的一个瓶颈。但如果将这些对象的相似部分抽取出来共享,则能节约大量的系统资源,这就是享元模式的产生背景。在Java中String值的存储就使用了享元模式,相同的值只存一个。一...

2019-08-10 16:45:49

设计模式——外观模式

外观模式(FacadePattern):隐藏系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统方法的委托调用。现实生活中,常常存在很多复杂的例子,例如:去医院看病,可能要去挂号、门诊、化验、开药、取药,让患者家属觉得很复杂,如果有提供接待人员,...

2019-08-08 23:19:18

设计模式——组合模式

生活中存在很多“部分-整体”的关系,例如:大学中的学校与学院、学院与专业的关系。高楼与楼层和房间之间的关系等等。在软件开发中也有类似的情况。这些简单对象与复合对象之间的关系,如果用组合模式(把学校、院、系都看作是组织结构,他们之间没有继承的关系,而是一种树形结构,可以更好的实现管理操作)来实现会很方便。一、基本介绍1)、组合模式(CompositePattern):又叫部分整体模...

2019-08-05 23:39:10

设计模式——装饰者模式

现实生活中常常需要给某类产品动态增加新的功能,如:给面条各种调味品。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成一些核心功能。但在不改变其架构的情况下,可以动态地扩展其功能。所以这些都可以采用装饰模式来实现。一、装饰者定义1)、装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则。2)、设计模式属于结构型模式3...

2019-08-04 11:46:15

设计模式——桥接模式

在生活中,一些对象具有两个或多个维度的变化,如用户购买汽车时,既要考虑品牌(奔驰、哈佛)又要考虑类型(轿车、SUV)等等。如果使用继承的方式实现,m种品牌和n种类型就有m*n种,不但对应的子类多,而且扩展困难。如果使用桥接模式就能很好地解决这些问题。一、传统方式实现1)、传统方式:继承实现类图:2)、传统解决方案问题分析:●扩展性问题(类爆炸),如果继续增加...

2019-08-03 18:08:22

设计模式——适配器模式

适配器模式(AdapterPattern)是作为两个不兼容的接口之间的桥梁。它结合了两个独立接口的功能。在现实生活中,经常会遇到类似接口不兼容而不能在一起工作的实例,这是就需要第三者j进行适配,例如:手机与电源,当手机需要充电时,就需要充电器来适配电源。一、基本介绍●适配器模式是将某个类的接口转化成客户端需要的另一个接口表示,主要的目的是兼容性,让原本因接口不匹配不能一起工作的...

2019-08-01 23:47:23

设计模式——建造者模式

建造者模式(BuilderPattern):使用简单的对象一步一步构建成一个复杂的对象。这种设计模式属于创建者模式,它提供了一种创建对象的最佳方式。一个Builder类会一步一步构造最终的对象。该Builder类是独立于其他对象的。例如,计算机是由CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销...

2019-07-28 18:58:34

设计模式——原型模式

原型模式(PrototypePattern):是用于创建重复对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。思想:Java中Object类是所有类的根类,Object类提供了一个clone()方法,该方法可以将一个Java对象复...

2019-07-25 12:14:00

设计模式——工厂模式

工厂模式(FactoryPattern)是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单使用的模式。简单工厂模式定义了一个创建对象的类,由这个类...

2019-07-21 21:53:42

设计模式——七大原则

设计模式的目的是为了让程序,具有更好的代码重用性、可读性(编程规范性,便于后期维护和理解)、可扩展性(当需要增加新需求时,非常方便)、可靠性(增加新功能后,对原功能么有影响)、使程序呈现高内聚,低耦合的特性。设计模式包含了面向对象的精髓,“懂了设计模式,就懂得了面向对象分析和设计(OOA/D)的核心”一、单一职责原则单一职责原则(SRP:Singleresponsibilitypr...

2019-07-14 00:46:53

Redis Cluster 集群搭建及节点的添加、删除

一、什么是RedisClusterRedis是在内存中保存数据的,而我们的电脑一般内存都不大,这也意味着Reids不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB。Redis更适合处理高并发,一台设备的存储能力是有限的但是多台设备协同合作,就可以内存增大很多倍,这时就需要集群。Redis集群搭建的方式有很多种,但从red...

2019-07-04 21:27:14

Nginx 反向代理(正向代理)

一、正向代理(了解)现实生活中客户端无法直接向服务端发起请求的时候(例如:我们无法访问某些国外网站<如:google>,就需要通过某软件实现代理,来获取某些国外网站<如:google>的信息),我们就需要代理服务器。正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径(例如:教学环境时,同学们使用的计算机就不能访问百度,只能通过老师...

2019-06-30 13:09:33

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 推荐红人
    推荐红人
    发布高质量Blink,被小编推荐一次即可获得,有效期7天
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。