<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[彬子的技术专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/namehybin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; namehybin]]></copyright><item><title><![CDATA[重构改善即有代码的设计]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/84665392</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/84665392</guid><author>namehybin</author><pubDate>Fri, 30 Nov 2018 18:07:26 +0800</pubDate><description><![CDATA[（一）重构原则
1、何谓重构
对软件内部结构的一种调整，目的是在不改变软件可观察行为的前提下，提高其可理解性，降低其修改成本。
另一种解释是：使用一系列重构手法，在不改变软件可观察行为的前提下，调整其结构。
重构不止是代码整理，它提供了一种高效且受控的代码整理技术
2、为何重构

改进软件设计：如果没有重构，程序的设计会逐渐变质，重构很像是在整理代码，你所做的就是让所有的东西回到应处的位置上。
帮...]]></description><category></category></item><item><title><![CDATA[设计模式：工厂方法]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/80689356</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/80689356</guid><author>namehybin</author><pubDate>Thu, 14 Jun 2018 10:58:57 +0800</pubDate><description><![CDATA[工厂方法模式的定义定义一个用于创建对象的接口， 让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类。工厂方法模式的通用类图如图所示。在工厂方法模式中， 抽象产品类Product负责定义产品的共性， 实现对事物最抽象的定义； Creator为抽象创建类， 也就是抽象工厂， 具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的。/**
 * 抽象产品类
 */
pub...]]></description><category></category></item><item><title><![CDATA[设计模式：单例模式]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/80689164</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/80689164</guid><author>namehybin</author><pubDate>Thu, 14 Jun 2018 10:33:14 +0800</pubDate><description><![CDATA[单例模式的定义单例模式（ Singleton Pattern） 是一个比较简单的模式， 其定义如下：确保某一个类只有一个实例， 而且自行实例化并向整个系统提供这个实例。单例模式的通用类图如图所示:Singleton类称为单例类， 通过使用private的构造函数确保了在一个应用中只产生一个实例， 并且是自行实例化的（ 在Singleton中自己使用new Singleton()） 。 单例模式的通...]]></description><category></category></item><item><title><![CDATA[设计模式：门面模式]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/79187300</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/79187300</guid><author>namehybin</author><pubDate>Sun, 28 Jan 2018 15:54:18 +0800</pubDate><description><![CDATA[定义

门面模式也叫外观模式，是一种比较常见的封装模式，定义如下： 
一个子系统的外部与其内容的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口，使得子系统更易于使用。

门面模式注重“统一“，也就是提供一个访问子系统的接口，除了这个接口不允许有任何访问子系统的行为发生。其通用类图如下：



类图很简单，但是它代表的意义可是异常复杂，SubSystem是子系统中所有类的简称。

门面]]></description><category></category></item><item><title><![CDATA[设计模式：代理模式]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/79054895</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/79054895</guid><author>namehybin</author><pubDate>Fri, 19 Jan 2018 17:03:26 +0800</pubDate><description><![CDATA[定义为其他对象提供一种代理以控制对这个对象的访问。代理模式通用类图代理模式也叫委托模式，它是一种设计技巧，许多其他的模式如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用委托模式。代理模式可以提供非常好的访问控制。抽象主题类public interface Subject {
    //定义一个方法
    public void request();
}真实主题类public clas]]></description><category></category></item><item><title><![CDATA[设计模式：策略模式]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/79054888</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/79054888</guid><author>namehybin</author><pubDate>Sun, 14 Jan 2018 04:52:10 +0800</pubDate><description><![CDATA[定义
策略模式是一种比较简单的模式：定义一组算法，将每个算法封装起来，并且使他们之间可以互换。


策略模式的通用类图：




策略模式使用的是面向对象的继承和多态机制，非常容易理解和掌握，


Context封装角色
也叫上下文角色，起承上启下封装作用，屏蔽高层模块对策略、算法的直接访问，封装可能存在的变化。



Strategy抽象策略角色
策略、算法的]]></description><category></category></item><item><title><![CDATA[Springboot集成Redis]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/79036782</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/79036782</guid><author>namehybin</author><pubDate>Thu, 11 Jan 2018 17:39:54 +0800</pubDate><description><![CDATA[Redis 简介Redis 是完全开源免费的，遵守BSD协议，是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点：
Redis支持数据的持久化，可以将内存中的数据保存在磁盘中，重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据，同时还提供list，set，zset，hash等数据结构的存储。
Redis支持]]></description><category></category></item><item><title><![CDATA[Java NIO]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/78800991</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/78800991</guid><author>namehybin</author><pubDate>Tue, 09 Jan 2018 13:40:30 +0800</pubDate><description><![CDATA[Java NIO 概述Java NIO 由以下几个核心部分组成： 
* Channels 
* Buffers 
* SelectorsChannel 和 Buffer基本上，所有的IO在NIO中都从一个Channel开始。Channel有点象流。 数据可以从Channel读到Buffer中，也可以从Buffer写到Channel中 
SelectorSelector允许单线程处理多个Channel]]></description><category></category></item><item><title><![CDATA[设计模式：适配器模式]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/78885569</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/78885569</guid><author>namehybin</author><pubDate>Sun, 24 Dec 2017 16:15:25 +0800</pubDate><description><![CDATA[定义将一个类的接口变换称客户所期待的另一种接口，从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。适配模式通用类图：适配器模式就是把一个接口或类转换成其他的接口或类，从另一个方面来说，适配器模式就是一个包装模式，它把Adaptee包装成一个Target接口的类，加一层衣服，包装成另一类。下面来看看适配器的三个角色：
Tagret目标角色： 
该角色定义把其他类转换为何种接口，也就是我们所期]]></description><category></category></item><item><title><![CDATA[设计模式：6大设计原则]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/78824745</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/78824745</guid><author>namehybin</author><pubDate>Wed, 20 Dec 2017 00:02:45 +0800</pubDate><description><![CDATA[单一职责原则

单一职责原则（Single Responsibility Principle，简称SRP）

定义：应该有且仅有一个原因引起类的变更。 
单一职责原则要求一个接口或类只有一个原因引起变化，也就是一个接口或类只有一个职责。

优点：


类的复杂性降低，实现什么职责都有明确的定义。
可读性提高，复杂度降低。
可维护性提高。
变更引起的风险降低，


单一职责使用于接口、类，同时也适用]]></description><category></category></item><item><title><![CDATA[设计模式：模板方法模式]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/78823138</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/78823138</guid><author>namehybin</author><pubDate>Sun, 17 Dec 2017 10:11:14 +0800</pubDate><description><![CDATA[模板方法模式：定义一个操作中的算法的框架，而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法非常简单，仅仅使用了Java的即成机制，但它是一个应用非常广泛的模式，其中AbstractClass叫做抽象模版，它的方法分为两类：
基本方法：由子类实现，并且在模板方法中被调用。
模板方法：可以有一个或几个，一般是一个具体的方法，也就是一个]]></description><category></category></item><item><title><![CDATA[Mac下PHP Fatal error: Class 'Memcache' not found]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/78783790</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/78783790</guid><author>namehybin</author><pubDate>Tue, 12 Dec 2017 17:05:57 +0800</pubDate><description><![CDATA[这几天开发PHP Memcache遇到了这个奇葩的问题。Memcache环境安装成功但是运行代码总是报错$mem = new Memcache();
$mem->connect('127.0.0.1',11211);
$mem->set("foo","3",0,10);
echo $mem->get("foo");运行提示PHP Fatal error:  Class ‘Memcache’ not]]></description><category></category></item><item><title><![CDATA[Spring(一)：HelloWord]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/78745514</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/78745514</guid><author>namehybin</author><pubDate>Thu, 07 Dec 2017 20:39:01 +0800</pubDate><description><![CDATA[概述
Spring 是最受欢迎的企业级 Java 应用程序开发框架。数以百万的来自世界各地的开发人员使用 Spring 框架来创建好性能、易于测试、可重用的代码。
Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言，绝大部分Java应用都可以从Spring中受益。

目的：解决企业应用开发的复杂性功能：使用基本的JavaBean代替EJB，并提供了更多的企业应]]></description><category></category></item><item><title><![CDATA[MVC、MVP、MVVM]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/78742547</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/78742547</guid><author>namehybin</author><pubDate>Thu, 07 Dec 2017 16:09:26 +0800</pubDate><description><![CDATA[MVC
MVC，Model View Controller，是软件架构中最常见的一种框架，简单来说就是通过controller的控制去操作model层的数据，并且返回给view层展示，具体见下图

当用户出发事件的时候，view层会发送指令到controller层，接着controller去通知model层更新数据，model层更新完数据以后直接显示在view层上，这就是MVC的工作原理。]]></description><category></category></item><item><title><![CDATA[Android7.0适配总结]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/78571964</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/78571964</guid><author>namehybin</author><pubDate>Sat, 18 Nov 2017 22:56:30 +0800</pubDate><description><![CDATA[一、权限更改对于面向 Android 7.0 的应用，Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用，则应用出现故障，并出现 FileUriExposedException 异常。要在应用间共享文件，您应发送一项 content:// URI，并授予 URI 临时访问权限。也就是说]]></description><category></category></item><item><title><![CDATA[ArrayList源码分析]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/52858690</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/52858690</guid><author>namehybin</author><pubDate>Wed, 19 Oct 2016 13:38:38 +0800</pubDate><description><![CDATA[ArrayList是基于数组实现的，是一个动态数组，其容量能自动增长，类似于C语言中的动态申请内存，动态增长内存。ArrayList不是线程安全的，只能在单线程环境下，多线程环境下可以考虑用collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类，也可以使用concurrent并发包下的CopyOnWriteArrayList类。ArrayL]]></description><category></category></item><item><title><![CDATA[Java程序优化-设计优化]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/52854475</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/52854475</guid><author>namehybin</author><pubDate>Tue, 18 Oct 2016 23:52:17 +0800</pubDate><description><![CDATA[设计优化1.单例模式（1）对于频繁使用的对象，可以省略创建对象所花费的时间，这对于那些重量级的对象而言，是非常可观的一笔系统消耗。（2）由于new操作的次数减少，因而对系统内存的使用频率降低，这将减轻GC的压力。2.代理模式使用代理对象完成用户的请求，屏蔽用户对真实对象的访问，这里主要讨论使用代理模式实现延迟加载，从而提升系统的性能和反映速度。例如，使用代理类封装对数据库查询中的初始化操作，当系统启]]></description><category></category></item><item><title><![CDATA[Android安全－数字证书]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/50498092</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/50498092</guid><author>namehybin</author><pubDate>Mon, 11 Jan 2016 18:36:50 +0800</pubDate><description><![CDATA[数字证书就是互联网通讯中标志通讯各方身份信息的一串数字，提供了一种在Internet上验证通信实体身份的方式，数字证书不是数字身份证，而是身份认证机构盖在数字身份证上的一个章或印（或者说加在数字身份证上的一个签名）。它是由权威机构——CA机构，又称为证书授权（Certificate Authority）中心发行的
证书的内容包括：电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等]]></description><category></category></item><item><title><![CDATA[Android安全－HASH算法]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/50482047</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/50482047</guid><author>namehybin</author><pubDate>Fri, 08 Jan 2016 14:42:48 +0800</pubDate><description><![CDATA[HASH，一般翻译做“散列”，也有直接音译为“哈希”的，就是把任意长度的输入（又叫做预映射， pre-image），通过散列算法，变换成固定长度的输出，该输出就是散列值。不同的输入可能会散列成相同的输出，所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
HASH特点：
易变性：即使原始信息发生1bit的变化，HASH算法的输出将会有不可]]></description><category></category></item><item><title><![CDATA[Android安全－对称加密和非对称加密]]></title><link>https://blog.youkuaiyun.com/namehybin/article/details/50469904</link><guid>https://blog.youkuaiyun.com/namehybin/article/details/50469904</guid><author>namehybin</author><pubDate>Thu, 07 Jan 2016 19:31:44 +0800</pubDate><description><![CDATA[秘钥：分为加密秘钥和解密秘钥
明文：没有进行加密，能够直接代表原文含义的信息
密文：经过加密处理之后，隐藏原文含义的信息
加密：将明文转换为密文的过程
解密：将密文转换为明文的过程
AES：更快，兼容设备，安全级别高；

SHA1：公钥后处理回传

DES：本地数据，安全级别低

RSA：非对称加密，有公钥和私钥]]></description><category></category></item></channel></rss>