![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
万明智
这个作者很懒,什么都没留下…
展开
-
gradle基本使用
相信使用做安卓开发的对gradle并不陌生,gradle是个帮我们build的工具。他与make和ant不同的是它是基于一种语言,而不是配置。这也就使得它拥有更大的灵活性。闲话少说,下面说说基本用法。 1下载gradle 并解压,然后在环境变量中加入它bin文件夹地址。 2 在命令行中输入gradle测试是否可用。如果不可用检查环境变量和是否装了jdk,gradle是依赖jdk的。 3原创 2016-12-17 15:42:55 · 1491 阅读 · 0 评论 -
桥接模式
因为这个模式网上有很多不恰当的例子,这里先引用百度百科的定义:桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。 所以说桥接模式就是接口模式,一方调用接口,一方实现接口。还是百度上的示例代码:public class Abstraction{/* Fields */原创 2017-09-11 20:18:16 · 1513 阅读 · 0 评论 -
享元模式
享元模式听名字就知道是共享一个东西,为了节省内存嘛。那么它和单例模式有什么不同呢?单利模式就一个对象,而享元模式是一组对象,共享的是相同的对象。没错,我们的String就用的享元模式,下面我们代码实现:public abstract class Flyweight{ public abstract void operation(); } public class Concre原创 2017-09-11 20:34:41 · 1473 阅读 · 0 评论 -
组合模式
这里的组合模式不是”组合好于继承”的组合,那么是什么组合呢,我们来看代码:abstract class Component { String name; public Component(String s){ this.name=s; } public abstract void add(Component c);原创 2017-09-11 21:06:58 · 1489 阅读 · 0 评论 -
策略模式与机制
在说策略模式之前,我们首先要说下Unix/Linux的接口设计有一句通用“提供机制而不是策略”的格言。 什么是策略,策略有点像战术是具体的东西。而机制像战略是目的。 通俗来说机制是做什么,策略是怎么做。public class Strategy { // 抽象策略 interface EatStrategy { void eatFood(); } s原创 2017-09-21 13:38:59 · 2974 阅读 · 0 评论 -
观察者模式与回调
在说观察者模式之前,我们来说一下回调函数。如小明想找小丽看电影,小丽不在家。小丽妈妈接的电话,于是小明说小丽到家了告诉他。实现如下:public class Observer { public interface Watcher { public void update(); } public static class 小丽妈妈{ private原创 2017-09-21 16:49:24 · 2899 阅读 · 0 评论 -
备忘录模式
备忘录模式也叫快照模式。在我们使用画图或ppt等办公软件时,常要撤销一些操作,这也是这个模式存在的最主要原因。代码如下:public class Memento {//这个模式为了恢复到以前的某个状态 static class Originator { private String state = ""; public String getState() {原创 2017-10-13 16:24:34 · 1733 阅读 · 0 评论 -
状态模式
生活中大部分东西都用容易变的和不容易变的,容易变的我们叫这个东西处于某种状态。比如人睡觉时你不要吵醒他。有时候某种状态影响对象整个的外部表现:像水和冰给人感觉就不是一个东西了,这时候我们就可以用状态模式了:public class State { public interface IWaterState { void printState(); } public s原创 2017-10-13 16:34:05 · 1459 阅读 · 0 评论 -
解释器模式
这是设计模式最后一篇,迟迟没有写。听到这个名字可能会想到解释型语言,学习编译倒也可以参考一下这个。这个在实际工作中用的很少,直接上实现加减乘除的代码吧public class Interpreter { interface Expression { int interpret(Context context); } //终结符表达式(Terminal Expre原创 2017-11-01 10:32:07 · 1699 阅读 · 0 评论 -
程序员的自我修养
如题所述,这是一个关于好程序员的故事。那么什么样的程序员叫好的程序员呢,我们这里之谈技能方面。那这就好办了,好程序员就是写的好代码的程序员。对吗?对不完全对,因为忽略了程序员的一个重要特性,就是改bug和在改bug的路上。于是我们得出好程序员就是产生最少的bug和最快的改好bug。一。产生最少的bug 1.最简单的实现功能:这个道理简单,代码越少bug越少。先不考虑优化、性能这一切东西,也不要用自原创 2017-08-04 11:19:39 · 2964 阅读 · 0 评论 -
访问者模式
访问者模式,很多人认为是最难的一种设计模式。我觉得是名字没起好。我们先换个名字,不如叫它读者模式,我们知道一千个读者有一千个哈姆雷特。也就是说同一个对象,不同的读者会有不同的操作。代码如下:public class Visitor { abstract static class Element {//抽象的书 public abstract void accept(IVisi原创 2017-10-17 10:26:25 · 1697 阅读 · 0 评论 -
中介者模式
中间人模式也叫中介模式,听名字就应该知道的差不多了。下面例子中张三李四中间就有个中间人,代码如下:public abstract class Mediator { public abstract void contact(String content, String name); public static class Colleague { protected Str原创 2017-10-17 15:34:18 · 1676 阅读 · 0 评论 -
装饰器模式
装饰器模式,听名字就知道是在原来的上面加点东西,面向对象的23种设计模式点这里。废话少说,我们把圆球图上颜色。上代码:public class Decorator { public interface Color {//颜色接口,可返回任意颜色 String draw(); } public static class RedColor implements Co原创 2017-08-30 16:15:28 · 1692 阅读 · 0 评论 -
面向对象的23种设计模式
首先呢,设计模式是针对面向对象来的。再说设计模式之前我们先来说一下六大设计原则。 首先最基础的开闭原则:对扩展开放,对修改关闭。 为啥这是最基础的,因为我们都知道软件是要改的。对扩展开放保证了可以增加功能,像泛型啦这些。对修改关闭保证了像前的兼容性,jdk7兼容jdk6这样。所以开闭原则围绕软件的整个生命周期。在说其余五个之前我先说一下程序设计的模块内高内聚,模块间低耦合,其实把类看成一个模块,结原创 2017-08-16 15:42:34 · 10159 阅读 · 0 评论 -
外观模式
这个是比较好理解的,拿我们的电脑做例子。电脑有cpu,内存,显卡等这些。当电脑开机时,主板、cpu、内存等都要启动。但作为用户并不需要管里面启动顺序之类的,我们只要按下开机键就行了。public class Facade { public static class Board { public void start(){ System.out.print原创 2017-09-04 15:21:10 · 1468 阅读 · 0 评论 -
代理模式
代理模式和装饰器模式实现起来很像,那他们的区别在哪呢。我喜欢从名字上分析,装饰只是加点东西,而代理是全权的。所以装饰改的是一个接口的方法(当然装饰可以嵌套),而代理是所有的方法(当然java动态代理只能更改有接口的)。代理分为静态代理和动态代理,下面上静态代理代码:public class Proxy { interface Draw { String draw();原创 2017-09-01 17:20:45 · 1492 阅读 · 0 评论 -
两种适配器模式
说到适配器,我想我们接触最多的叫电源适配器。没错,所有的手机充电器都是电源适配器。从交流变直流,从220v到5v。而适配器模式分为两种,一种是类适配器,一种是对象适配器。下面先写类适配器:public class Adapter { static class HomePower { public String homeRequest() {原创 2017-08-24 18:08:11 · 1939 阅读 · 0 评论 -
java的hashcode详解
在java实际运用当中,我们会时常用到集合类hashMap和hashSet。但关于hashcode的一些说法是不确切的,比如这个:hashcode是个索引。那么具体怎么不确切呢,我们从头说起。 hash的中文意思是散列,MD5也是一种散列算法。所以直接把hashcode看成一个对象的MD5就行了。我们知道MD5是信息摘要,是为了确定文件是不是原来文件。而且我们知道同一个文件的md5必须相同,原创 2017-01-05 10:59:54 · 1561 阅读 · 0 评论 -
java垃圾回收与安卓内存分析
首先,我们来说说内存泄漏与内存溢出。我们知道程序运行过程中会产生很多的对象,而有些对象用过之后就不用了。这时候就要对其所占的内存进行释放。如果释放不了,这就造成了内存泄漏。而当多次创建这种对象,这时候内存一直涨超过安卓app可拥有的最大内存就会产生内存溢出。所以,内存溢出和内存泄漏没必然关系。正常情况导致的内存溢出我们就不说了,我们要研究的是内存泄漏,不管它有没有溢出。追究内存泄漏的根源在于对象没有原创 2017-01-18 18:07:59 · 1917 阅读 · 0 评论 -
String StringBuffer StringBuilder区别浅析
在Java中,我们操作最多的类应该就是String了,String类提供了很多字符串操作的方法,其实功能上所有操作都能用String解决,那么我们为什么还要有StringBuffer和StringBuilder呢?是性能好吗?好多少呢?以及为什么好呢? 首先我们来看String的生成“abc”的三个代码,我们知道Stirng的==判断的是地址,大家猜下结果。String a原创 2016-12-03 14:38:00 · 1393 阅读 · 0 评论 -
工厂方法模式
我们在看一些源码时经常会看到xxxxFactory,这就是工厂模式了。面向对象的23种设计模式点这里。说工厂模式之前先说个段子:有个单身的java程序员,过年回家晚上睡着了。父母看着独生的儿子就着急说“你看也不小了,这没有对象怎么办”,程序员在梦中“随便new 一个”。这个怕是不好new,所以我们要找今天的婚姻介绍所:工厂模式。废话不说,代码伺候:public class Factory {//简单原创 2017-08-18 17:27:29 · 1970 阅读 · 0 评论 -
java的jdk动态代理简单封装
首先什么是代理呢,代理就是你可以办一件事,而你不办,交给另一个人办。因为被代理人在办这件事前或事后,知道多做一些其他工作。至于静态代理和动态代理,只是实现方式不同。具体点这里 一般java的动态代理有两种方式,一种是jdk,一种是cglib。有人说cglib比jdk快,其实随着jdk7,jdk8对reflect的优化,jdk已经赶超了cglib。当然cglib可以代理任意方法是长处。下面是对jdk原创 2017-08-14 18:11:35 · 1603 阅读 · 0 评论 -
迭代器模式
迭代模式就是提供一种遍历方式,像list、set等都实现了迭代模式。我们下面实现对String字符的遍历:public class MyIterator { interface iterator { Object next(); boolean hasNext(); } static class MyString implements iterat原创 2017-09-25 09:00:08 · 1406 阅读 · 0 评论 -
责任链模式
说责任链之前,我们先来说责任。责任就是一件事情由谁处理,出了问题由谁负责。无论公司还是政府,都是层层管理的,上面不处理就交给下面。就形成了一个责任链条, 现在的触屏设备的点击事件也是一样。一般都采用责任链模式,大控件不处理就转给小控件。代码如下:public class ResponsibilityChain { public static abstract class Widget {原创 2017-09-25 11:36:19 · 1522 阅读 · 0 评论 -
命令模式
命令,我们知道有命令、命令者、和被命令者。代码如下:public class Command { //命令模式 本来很简单的一句话的事为啥要整个模式,这个模式最主要的是命令者和被命令者的分离 public interface command {//命令接口 void exe(); } public static class MyCommand imple原创 2017-09-28 18:28:36 · 1465 阅读 · 0 评论 -
模板方法模式
我们做一些事情都有一个步骤,而相似事的步骤是一致的。就拿我们打10086来说,有人查余额和有人要人工服务,但他们的不知都分下面三步:拨号、选择服务、评分。这种最适合用模板方法,实现如下:public class TemplateMethod { //模板抽象方法 public abstract static class Template10086 { //1.拨打10原创 2017-09-21 15:11:25 · 1429 阅读 · 0 评论 -
六种线程安全的单例模式
单例模式怕是很多程序员使用最多的设计模式了,面向对象的23种设计模式点这里。废话不多说,直接上代码:public class Singleton { //1.懒汉型 private static Singleton instance; private Singleton (){} public static synchronized Singleton g...原创 2017-08-16 18:31:34 · 5596 阅读 · 2 评论 -
原型模式的深浅复制和序列化
这是java的Object直接有方法的设计模式,面向对象的23种设计模式点这里。我们要做的只是实现Cloneable接口,这个接口的目的只是告诉jvm这个类的对象可以clone。同样的还有Serializable接口,今天说的跟它也有关系。下面回到题目,复制和clone相信大家都知道。就是弄个一模一样的,而那个模子就叫原型。那么什么是深复制和浅复制呢?这和对象实现有关系,对象里的属性有基本类型和引用原创 2017-08-17 15:19:24 · 2101 阅读 · 0 评论 -
抽象工厂模式
上一篇写了简单工厂和工厂方法,简单工厂和工厂方法点这里,面向对象的23种设计模式点这里。我们还用上词美女的例子,直接上代码:public class Factory {//抽象工厂模式,还是一个类。觉得适合看的人拷过去运行修改 abstract static class 美女 { 身材 身材;//这里为了简单,我们感兴趣的只是身材 void 美女(){原创 2017-08-21 14:13:05 · 1647 阅读 · 0 评论 -
建造者模式
建造者模式使用的也是比较多的设计模式,public class Computer { private String cpu; private String screen; private String disk; private Computer() { } @Override public String toString() {原创 2017-08-22 10:15:28 · 1630 阅读 · 0 评论 -
Java线程安全相关理论
多线程原因说线程产生的原因之前,我们先说进程的产生。我们都知道刚开始电脑特别大,而且特别贵,最主要还特别慢,那时的cpu速度和外面的硬盘速度差不多。但人们对速度的追求是无情的,随着cpu的频率奔跑,于是硬盘明显跟不上,于是有了内存做缓存。有了内存有人想同时执行多个任务,因为单个任务老是会因为等IO中断浪费时间,于是把任务保存在内存里。便有了多进程。可以在等IO的时候执行另一个任务。 线程同理...原创 2018-07-03 15:37:16 · 518 阅读 · 0 评论