自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小宏的博客

目前状态:代码无错未必优

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

原创 设计模式-享元模式

        设计思路分析:将公共的部分提取出来Flyweight抽象类,并由FlyweightFactory工厂进行初始化,当需要大量调用此类对象时,直接对工厂类进行调用获取引用。其实这个模式就是跟我们平常写的一些公共类一样,只不过正常情况下我们是直接new或者注入,这个模式就是通过抽象由工厂分配,当大量使用某些对象会发生很大的开销的情况下,可以使用这个模式。 外部状态与内...

2019-02-15 17:15:46 167

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

               中介者模式的优缺点优点:简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,将各个同事类解耦,使得系统变为松耦合。 提供系统的灵活性,使得各个同事对象独立而易于复用。缺点:中介者模式中,中介者角色承担了较多的责任,所以一旦这个中介者对象出现了问题,整个系统将会受到重大的影响。 新增加一个同事类时,不得不去修改抽象中介者类和具体中介者...

2019-02-13 17:27:34 144

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

            设计思路:自己装自己 根据条件选择自己  使用场景:跟职责链名字一样,当需要进行一个顺序执行的情况下,那么各个环节耦合开来,当需要切换环节时,只需要更改某环节中的执行类即可。总结自《大话设计模式》-职责链模式...

2019-02-13 15:44:23 127

原创 设计模式-命令模式

                设计思路:设计命令抽象类Command,实现该抽象类ConcreteCommand定义具体的命令内容,初始化命令执行者Receiver,由Invoker对Command类型进行操作,这样就可以对每一个命令(请求)进行额外的操作比如(撤销操作,记录日志等等),就把命令的具体执行内容与执行者分离开来,执行者代码中无法知道具体有多少条命令,只管执行,单...

2019-02-13 11:47:33 143

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

                                             总结一下迭代器模式的流程思路:首先Iterator接口或抽象类中定义关键的isDone()遍历是否结束方法以及一个next()如何遍历的方法,由子类实现Iterator的这两个方法,并将Aggregate类装入ConcreteIterator,进行遍历操作,而需要选择遍历方法,只需要重新编写一...

2019-02-12 15:56:13 123 1

原创 设计模式-组合模式

                                      与面向过程变成的比较(以一个文件夹遍历的例子): 创建文件夹类、文件类,文件夹中可以包含文件夹及文件,客户端进行调用,对某个节点操作会比较复杂。这里参考:https://www.cnblogs.com/lfxiao/p/6816026.html 安全方式:即Componet中可以去掉叶节点中不需要的方法...

2019-01-19 17:07:15 72

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

                  这里举个备忘录流程:首先创建一个Originator将需要保存的属性交由Caretaker保存一个版本(Memento),在进行一些操作之后需要回退上个版本,再将Caretaker.Memento通过SetMemento()方法设置之前保存的版本(Memento)。具体实现代码参照:https://www.cnblogs.com/zyrblog/p/...

2019-01-18 11:43:55 70

原创 设计模式-适配器模式与外观模式区别

                                             第一眼看到适配器模式,我第一反应就是怎么跟外观模式有点像,仔细看完之后,发现做法上是不一样的。针对适配器模式,笔记本电脑跟显示器需要一根转接线才能连接,而笔记本电脑或者显示器(Client)都依赖于转接线这个适配器(Adaptar),而转接线的两个接口(Target)分别适配笔记本电脑跟显示器的接...

2019-01-17 15:47:05 2545

原创 设计模式-抽象工厂模式、简单工厂模式、工厂方法模式

                                                                       工厂方法模式举个例子来说,加减乘除4个具体运算类(ConcreteProduct)其实就是依赖于抽象运算类(Product),而返回加减乘除具体运算类,又是由依赖于抽象运算工厂类(Creator)的加减乘除4个工厂类(ConcreteProd...

2019-01-17 14:51:17 119

原创 设计模式-观察者模式与委托

使用动机:  举个例子来说(不要钻牛角尖):红绿灯就是一个依赖于Subject的ConcreteSubject具体通知者,而车辆行人就是各个依赖于抽象Observer观察者类,当灯变色时,红绿灯调用车辆行人的update()方法其实都可以叫做run()方法,而车辆行人再根据红绿色的当前状态执行下一步行动,就而已做到。如此,通知者和观察者都依赖于抽象,很好的实现了“依赖倒置”原则,在...

2019-01-16 14:57:53 230

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

   总结来说:电脑主机生产,简单来看,不过是cpu,内存,主板,显卡,电风扇,电源等等组件进行组装,而把这些组件当成一个个具体产品Product,抽象类Builder也就是固定好必须装 cpu,内存,主板,显卡,电风扇,电源等等方法,型号A类即依赖于Builder的具体建造者ConcreteBuilder,当然了型号B也是具体建造者,不过各个型号之间的各个组件肯定不一样,而后由生...

2019-01-12 19:05:15 75

原创 设计模式-外观模式

使用的动机:一、在我们编写代码的时候,大部分都会将不同的层次细分,那么增加一个中间者Facade,可以减少各层次之间的耦合,方便调用。                     二、在系统的开发中,代码量增加,各个类间的耦合,可以在其中增加一个外观Facade,减少各自的依赖。                     三、在重构粗糙高度复杂的遗留代码时,在不了解次模块下的各自细节,直接进...

2019-01-12 18:34:44 324

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

 这其实在我们平常的代码过程中,就已经经常用到这个模式,只是没有对这个方法进行总结。当我们编写一些功能时,多个子类的一些代码其实是相似的,那么就把他提取出来,放在父类,或者是一个公共类,这就是模板方法模式。其实设计模式就是对我们的代码编写的一些便捷方式的总结。总结自:《大话设计模式》 模板方法模式...

2019-01-12 16:35:44 92

原创 设计模式-原型模式

 使用场景:当一个对象需要在多处调用并且需要在其基础上做额外操作的时候,那么我们正常的逻辑,是new很多个对象,那么此时构造函数执行时,如果构造执行时间长,极为影响效率。原型模式就可以很好的做到clone,将对象的引用复制给下一个。而JAVA中在需要复制的类实现Cloneable接口,调用clone()方法。而这里又分为浅复制跟深复制浅复制:被复制的对象的属性值(成员变量)全部复制...

2019-01-12 15:32:41 80

原创 设计模式-工厂方式模式

 更为直观的例子结构图 在简单工厂中,我们将switch写在“给运算工厂类的方法里”,当需要在添加其他算法时,需要去修改switch中的case分支,那么就不符合“开放-封闭”原则,而这个时候工厂方法就出现了。而这样,尽管第一次看上去会发现,代码量很繁琐,但是当后续的算法增加,那么我们需要增加一个运算类子类,一个该子类的工厂,然后在客户端进行调用,那么就将修改的部分放到了客户端上,对我...

2019-01-12 14:38:29 125

原创 设计模式-代理模式

 代理类Proxy与被代理类RealSubject依赖于同一个抽象Subject,所以可以在Proxy基础上对代理类的访问做一些额外的功能。 应用场合远程代理:具体举例还没有想到。虚拟代理:因为proxy代理类跟被代理类都依赖于同一个抽象,那么当被代理类加载时间过长,可以暂存让proxy代理类替代被代理类的位置,比如HTML中,页面并不是同一时刻所有图片同时加载,而是动态加载,...

2019-01-12 12:02:41 80

原创 设计模式-装饰模式

  当发现一个需求,比如是乐高积木,每一块木头都是动态进行添加摘除,那么如果为每一种组合都写一个类,那么这样的代码就是极为糟糕的,而如果使用装饰模式,将所有不同形状的木头都抽象为一个积木类,而通过“自己装自己的同类”,这个在多态上是允许的,那么当不同的组合,我只需要按照顺序装备出来,那么复用、灵活性上就得到很好的实现。比如JAVA数据流stream使用的就是装饰模式。总结自:《大话设计...

2019-01-12 11:47:05 100

原创 设计模式-策略模式

 假设对于商场系统中“正常收费”、“满300返100”、“打8折”,都是对价格处理的算法,而它们具有公共功能(处理价格之后返回),那么如果按照面向过程中写如下:switch(String type){case "正常收费":return ...;case "300返利100":return ...;case "打8折":return ...;}一个类就可以搞定了,但...

2019-01-10 16:06:32 73

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

 其实,在平常的代码中我们会时不时用到简单工厂模式,只是我们为了方便去做的,而并没有把这种模式总结起来。照着上图,简单工厂类依赖于运算类,而加法、减法、乘法、除法都是运算类的子类,那么通过简单工厂类装载运算类,并通过封装、继承、多态,在工厂类中返回对应的子类调用同一个GetResult(),就能获取到不同的行为方式。 缺:简单工厂类中需要做判断返回相应的运算类,那么当需要加上新的类...

2019-01-08 18:03:13 88

原创 设计模式-状态模式

状态模式(state):当一个对象的内在状态改变时其行为,这个对象看起来像是改变了其类。简单来理解,当使用多个条件判断(if else),而这个条件判断之后处理的都是同一个对象的不同的行为,当这个判断过于复杂时,可以使用状态模式进行简化(说是简化,其实就是将多个判断分为几个类分开调用),这样如果当需求变更的时候,改动的地方不会太大,并且方便后续维护。 上图中 ConcreteSta...

2019-01-08 17:16:29 98

原创 枚举Enum类型

目录 1.如何用2.向enum添加方法3.switch中使用enum4.values()并不是Enum的方法5.对Enum进行分类只能实现接口6.EnumSet7.EnumMap8.常量相关的方法9.多路分发(重点这里,说一下我的讲解)使用enum分发使用常量相关方法分发EnumMap分发、二维数组分发(简单但是容易出错,不安全),这里不做讲解了...

2018-12-11 17:16:48 299

原创 容器的深入研究(本章主要介绍容器的使用跟对比,作为自己的工具笔记)

目录类库简化图(虚线接口,实线类)填充容器可选操作(稍微了解一下)List(这里比较简单就跳过)Set和存储顺序队列(除并发外,有链表LinkedList和优先级队列PriorityQueue)理解Map(这里的区别与List差不多就不做说明了)散列与散列码(这里需要掌握)一、首先简单了解下没有重写HashCode跟equals对传入散列容器的影响二、什么是...

2018-12-05 18:51:05 171

原创 泛型

当每一章阅读的时候,首先这个概念为什么会出现,有什么用,而根据这个概念的运用,为什么这么用,有什么好处。我觉得这个对理解概念的东西会事半功倍。目录简单泛型(基本都是介绍设计代码的用法)泛型接口泛型方法匿名内部类(可以在匿名内部类中使用泛型)、构建复杂模型(其实也就是多维元组)擦除(这才是我们应该需要去记住的东西)擦除的补偿边界通配符捕获异常自限定的类...

2018-11-30 16:31:32 288

原创 类型信息(运行时发现和使用类型信息)

首先理解RTTI,假设Circle、Square、Triangle继承于Shape,当我们用一个List<Shape> list = Array.asList(new Circle(),new Square(),new Triangle()),这个时候Circle、Square、Triangle三个会自动向上转型Shape,这个时候我们还在编写代码,List容器只是持有Shape的...

2018-11-19 19:20:22 225

原创 持有对象(也就是把对象存储到容器中得以持有)

持有对象听起来好像有点高大上,其实也就是把对象存储到容器中得以持有,而这个容器就是我们常说的集合类。其实本章中大篇幅只是再教你如何使用这些集合类,具体到一些方法上并去使用这些,这里我就不做演示,只是把其中的一些特殊的例子,用法以及我自己感觉比较重要但是有可能大家都不一定会很清楚的地方在这里总结出来。后面会有容器的深入研究,这里只是把区别用法罗列。由这张图,我们先有一小的总结:1.C...

2018-11-07 17:09:33 423

原创 内部类

Class A{ Class B{}}B类就是A类的一个内部类。而当需要new一个B类,就是需要A.B b = A.new B()。链接到外部类也就是说书中的例子比较详细,这里只是举个例子Class A{ private String s; Class B{ pritln(s); public A getA(){ ...

2018-11-05 15:46:45 105

原创 接口

说到接口就要说到抽象机制。可以用abstract修饰类或方法,修饰方法的时候当导出类继承这个类就要实现这个方法。这里特别提到一点,有抽象方法的类一定要是抽象类,而抽象类不一定有抽象方法(因为抽象类无法new出来,而我们有时候可能会需要这个类不能被new出来就可以这样做。)。抽象类中可以有具体实现(也就是方法体里面写代码),而抽象接口里面只能定义方法名、参数类型和返回类型,并且没有方法体(接口内...

2018-10-30 17:13:03 84

原创 多态

,运行根据对象类型进行绑定=“后期绑定”。上面这段话先放一边,看起来有点专业化看不太懂,下面先放上一段代码:class Instrument { public void play(Note n) { print("Instrument.play()"); }}class Stringed extends Instrument { public void play(...

2018-10-26 17:29:31 132

原创 复用类

两种比较常见的方式:一种是“组合”即通过new对象;一种是“继承”。(一堆术语好气啊。。)而什么时候使用,继承=“is-a”(是一个),组合=“has-a”(有一个 ),一般我写程序组合和继承并用,比如汽车是一种车,这辆汽车上有座椅,那么汽车继承车,汽车又组合座椅。 客户端程序员编写的大部分代码就可以成为组合(听起来叫组合,通俗上理解就是你在类里new就可以称之为组合了)。继承(举个例子:...

2018-10-26 12:50:37 143

原创 访问权限控制(也称具体实现的隐藏),封装更准确的定义:“把数据和方法包装到类中,并将具体实现隐藏称之为封装,而其结果就是同时带有特征和行为的数据类型”。

public即公用,其修饰的成员,不论何时何地,只要他通过import引入之后都可以直接调用。private私有,修饰成员,继承都无法调用保证了某些方面上的安全性。protected受保护,非同包下无法使用,但是再使用继承之后可以跟public一样调用其修饰的成员,也可以完成一部分的代码逻辑实现上。default默认,即当客户端程序员忘记或者是留空情况下,就算继承也无法去调用其修饰的成...

2018-10-25 16:35:18 239 1

原创 可变参数

可变参数(JAVASE5之后新特性)static void printArray(Object[] args) { for(Object obj : args) System.out.print(obj + " "); System.out.println();}printArray(new Object[]{ new Integer(47), new Float(3....

2018-10-25 15:59:16 146

原创 初始化与清理

在初始化顺序上,JAVA编程思想4上里面,变量定义在方法内不管写在何位置都会先与任何方法执行class Bowl { Bowl(int marker) { print("Bowl(" + marker + ")"); } void f1(int marker) { print("f1(" + marker + ")"); }}class Table {...

2018-10-25 14:18:48 77

空空如也

空空如也

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

TA关注的人

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