java设计模式
java设计模式
sunpy 孙培煜
万物之中,希望至美;至美之物,永不凋零。
展开
-
创建型模式之单例设计模式(java版)
单例设计模式目得:主要就是为了使一个类只能存在一个实例化的对象。单例设计模式特点:如果想要使这个对象唯一,就不能随便让其他类还建立这个对象。但是还得让其他的类可以使用这个对象(就是只能使用,不能创造),所以其他类要想访问,只能通过专门提供的接口。单例设计模式java代码思想:1.构造函数私有化:由于不能被其他类建立对象,所以只能使他们的访问权限设置为priv原创 2016-07-27 22:47:28 · 481 阅读 · 0 评论 -
创建型模式之简单工厂模式(java版)
1.为啥要去工厂搞斧头?2.工厂是如何按你的要求把斧头造出来,交给你?3.这种简单工厂模式好不好啊?原创 2016-08-15 23:19:28 · 504 阅读 · 0 评论 -
创建型模式之工厂方法模式(java版)
1.引入:由于简单工厂模式的缺点:创建的类完全依赖于工厂类,违反开闭原则。意思就是工厂类不能写死了,写死不容易程序扩展。如果需要去工厂取斧头,采用简单工厂模式,实际就是把斧头的类型写死,但是如果用户要来个你们工厂没有的类型的斧头,那么就得把斧头的制造(具体产品),工厂类都修改。这样不方便。所以工厂方法模式就是解决这个问题,相对于简单工厂模式,需要从工厂类下手,通过接口和多个实现类的方式原创 2016-08-15 23:53:33 · 467 阅读 · 0 评论 -
创建型模式之抽象工厂模式(java版)
1.总结下工厂方法模式的特点:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。也就是具体的new对象都是具体工厂去做。而抽象工厂只是提供接口。工厂方法模式解析:工厂方法模式。简单点说就是工厂方法模式只是定义了创建对象的接口(给起个叫抽象工厂的名),实际让子类决定实现哪个接口来实例化对象(这个子类起名叫具体工厂。。。)原创 2016-08-17 00:01:05 · 513 阅读 · 0 评论 -
创建型模式之建造者模式(java版)
1.引入:工厂模式中创建的对象大都是简单的对象,就像之前举的造斧头的例子,斧头工厂就算造出来石斧,钢斧还是木斧,以及加上联想牌的钢斧或苹果牌石斧等等,说到底都是斧头,都是单一的对象。所以工厂模式就是对单一对象的管理。如果需求是既要创建斧头,又要创建菜刀还要青龙偃月刀呢,那么对于这种复杂的产品类并且拥有不同的属性特点的管理就需要用到建造者模式。2.什么是建造者模式:将一个复杂的对象的构建原创 2016-08-17 23:20:38 · 1125 阅读 · 0 评论 -
创建型模式之原型模式(java版)
1.引入:原型模式也是一种创建模式,采用将原对象作为原型,对这个原对象进行克隆,克隆出一个新对象。克隆就是从一个对象再创建另外一个可定制的对象并且不需知道任何创建的细节。2.例子:假如应聘者去面试,不可能只应聘一家公司,肯定会面试很多家公司,每家公司都需要把你的简历留下来和你的笔试题,作为选拔的标准。那么应聘者就需要准备多份简历,那么从设计模式的角度看,如果应聘者是小菜鸟,那么肯定原创 2016-08-18 23:57:53 · 615 阅读 · 0 评论 -
结构型模式之适配器模式(java版)
1.引入:什么是适配器模式?从“适配”这个词上理解,就是把原来两个不能一起工作的东西可以一起工作。而适配器模式就是使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。(适配=兼容)2.举例:一般菜鸟在接手一个老项目之前,需要读下项目的文档。然后发现文档是英文的,而对于菜鸟来说,需要的是中文文档。英文文档看不懂,就没法给老项目升级了。菜鸟不可能现去学英语,提高英语能力(英语是潜移默原创 2016-08-21 00:03:44 · 488 阅读 · 0 评论 -
结构型模式之装饰器模式(java版)
1.引入:装饰模式顾名思义就是对原有的东西增加一些包装,再原有的基础上增添东西。实际就是给一个对象添加一些新的功能,是动态的增加,相比于继承增加子类更加灵活。2.举例:假如原类是一个汽车类,汽车类作为原类有运输功能和听歌功能。如果想要增加导航和上网功能,不可以直接修改原类的代码,那么增添一个包装类,对原有的汽车类进行扩展。3.核心:使装饰类和被装饰类实现同一个接口,装饰类采原创 2016-08-21 22:45:06 · 497 阅读 · 0 评论 -
结构型模式之代理模式(java版)
1.引入:代理模式顾名思义就是使用一个代理类来代替原对象,来进行一些操作。2.举例:譬如刚毕业的小菜,去北京,刚去自己找房子租很困难,要不价格太贵,要不就是很便宜环境不太好,总是没顺心的,便会给中介打电话,这样中介就会帮小菜去找房子,因为中介掌握房源的信息很多很全面,这样找房子的活就由中介代理小菜去找了。这就是一个代理的过程。3.实现:--3.1房源类public cl原创 2016-08-22 21:24:56 · 532 阅读 · 0 评论 -
结构型模式之外观模式(java版)
1.引入:外观模式就是了解需要的子系统的属性或方法,然后把相关的子系统进行组合,产生的功能,然后为外界使用。2.举例:假如我要组装一个自行车,就需要车轮子和车架子。车轮子类里面有制造车轮子方法,车架子类里面有制造车架子的方法,我需要在自行车类里调用这制造车轮子和车架子的方法。就需要车轮子对象和车架子对象。自行车类里直接就new车轮子类和车架子类,通过两个对象去调用制造车轮子和车架子就完原创 2016-08-22 23:23:23 · 474 阅读 · 0 评论 -
结构型模式之组合模式(java版)
1.引入:组合模式就是把整体与部分进行组合,组合出来的结构为树形结构。使得用户操作部分中单个对象犹如操作整体对象一样。2.举例:在我们工作的周围会发现稍微大点的有规模上市的公司,都会有分公司,而且还会有相应的财务部和技术部等部门。然而对于这种大部门里有小部门,小部门里有小小部门的结构,一般会一层有一个负责人,分别向上级汇报工作的。会发现不是CEO直接管理我这个小码农,而是一层层管理的。原创 2016-08-23 23:27:11 · 428 阅读 · 0 评论 -
结构型模式之桥接模式(java版)
1.引入:桥接模式就是把抽象的事物和具体的实现分开,使得它们相互之间独立的变化,互不影响,用来达到解耦的效果。就是把变化的部分和不变的部分进行分离。2.举例:生活中如果我们要玩手机游戏,可以运行三星手机加载手游,也可以运行华为手机加载手游,所以就把运行手机的功能抽取成一个接口,然后定义三星手机和华为手机实现此接口就可以运行了。在这里运行的功能是不变的,手机牌子是变的,我们将它们进行了分原创 2016-08-24 11:17:42 · 481 阅读 · 0 评论 -
行为型模式之策略模式(java版)
1.引入:策略模式就是把定义的一系列的算法,封装起来,然后根据用户的需求来决定采用哪个算法,并且算法的修改对用户也没影响。2.举例:我们定义了一个整型数组,数组里面的整数都是没有顺序的,然后用户的需求是打算,从小到大排列。然后根据用户的需求来决定采用哪种算法来排序。每个算法之间也可以相互替换,并且这种替换对于用户来说是没有影响的。3.实现:--3.1.定义排序接口:pu原创 2016-08-25 17:16:35 · 361 阅读 · 0 评论 -
行为型模式之模板方法模式(java版)
1.引入模板方法模式就是当我们需要把某些细节层次,但器个别步骤的更详细的实现却是不同的时候,就需要用模板方法模式。实际上就是把一些更详细的信息在子类中去实现,这里更详细的信息就是可变的信息,因为每个子类都不同,所以具有可变信息,然后把不变的行为给他封装到父类中去,这样就去除子类中重复的代码了。2.举例一般我们做系统时都是照着软件工程的思想,就是先做需求分析,然后概要设计,然后详细设计,原创 2016-08-26 10:43:30 · 1304 阅读 · 0 评论 -
迭代器模式(java版)
1.引入java提供了很多容器,而迭代器模式就是提供一种方法,顺序访问聚集的对象。而又不暴露该集合的内部表示。里面也就一个需要被迭代的对象(集合),还有一个就是迭代器对象,用于对聚集对象进行迭代访问。如果之前学过Iterator的方式遍历集合将很好理解的。2.举例生活中,我们都做过公交,一般都是先排好队,然后依次刷公交卡上车,上车的时候都喊乘客往里走,这个就是从前到后遍历乘客对象,如果原创 2016-08-26 15:38:53 · 589 阅读 · 0 评论 -
备忘录模式(java版)
1.引入备忘录模式的核心就是再不破坏其封装性的条件下,捕获一个对象的内部状态,然后使用备忘录保存这个状态,然后就可以随便修改了,如果想要恢复其原内部状态,那么就直接用备忘录恢复原内部状态。2.举例在网页设计中,我们拿到别人前端设计的网页,如果我们直接就修改,那么恢复是不可能的。所以我们可以先把别人的前端网页先另保存一份在磁盘上,然后拿着原别人的前端网页开始随意修改了,如果我们想要恢复到原创 2016-08-28 15:55:52 · 643 阅读 · 0 评论 -
职责链模式(java版)
1.引入职责链模式就是有多个对象的情况下,每个对象都可以传值给下个对象,然后依次往下到最后一个对象,形成一条链。而请求的发出者发出请求,沿着链依次传递值到最后接收者(不一定是最后的节点)。这就保证了请求者和接收者的解耦,请求内容会从头到尾,但是请求者与接收者却毫无关系并且请求者对于到底是谁处理了请求也全然不知。2.举例工作中,当我们的编程水平提高,业务能力提升时,往往都会计划加薪,原创 2016-08-29 11:53:06 · 680 阅读 · 2 评论 -
命令模式(java版)
1.引入命令模式就是将命令的发出者与命令的实现者进行分离,将命令单独封装成一个对象,通过这个命令对象实现命令发出者与命令实现者之间相互解耦。2.举例在公司中,在打工的同行都渴望马上发工资,老板会把工资送到每个人手上吗,不会,老板这么大气都开公司了,这种小活只会让经理去干,那么老板就直接发送一条命令给经理,可以给这帮程序猿发工资了。其实就是老板一句话,但是可以发现,老板只与命令打交道,而原创 2016-08-29 22:47:15 · 610 阅读 · 0 评论 -
状态模式(java版)
1.引入状态模式就是对象的状态改变时,同时也就改变其行为。而一般对于我们状态的改变都是采用条件语句来判断,然后不同的状态满足什么条件就执行相应的程序。但是如果对象的状态很复杂,就把不同对象的状态以类的形式表示。实际上就把复杂的逻辑判断进行简单化,以实现对各种状态类的解耦。2.举例生活中,我们有工作状态,睡眠状态,娱乐状态,我们对于不同的状态肯定会有不同的行为,如我们处于睡眠状态则肯定不原创 2016-09-04 15:32:23 · 455 阅读 · 0 评论 -
中介者模式(java版)
1.引入中介者模式就是使用一个中介对象来封装各个对象之间的交互。由于使用了中介者对象,那么各个对象之间就不用显式地相互引用了,从而解耦。而我们一般都是直接显式地引用,而中介者模式就是多了中介者对象,一切的交互都用中介者对象去实现,就把各个对象之间复杂的交互都搞到中介者对象上去了。2.举例在开发中,我们对于数据的管理,可以采用一个中介者对于数据进行管理,而不是直接对原数据操作,譬如要取用原创 2016-09-04 20:14:12 · 660 阅读 · 0 评论 -
访问者模式(java版)
1.引入访问者模式就是将对象的数据结构(对象数据的存储)与对象的行为(对象的方法)相分离,避免了数据结构与操作的耦合。而访问者作为数据结构的操作者,如果想要增加数据结构的操作,那么只需要增加访问者就行了。所以前提是数据结构不变而操作可变,增加操作很容易,更改数据结构很困难。2.举例在生活中,我们在网上有公共的数据、也有个人的数据,而它们数据的存储结构是无变化的,变化的只是不同的访问者,原创 2016-09-05 17:17:56 · 555 阅读 · 0 评论 -
观察者模式(java版)
1.引入观察者模式采用一对多的方式,一是主题,多是指多个观察者,多个观察者监听了主题,如果主题发生变化,那么多个观察者就会收到通知,然后多个观察者再发生变化。2.举例在工作中,我们经常会用到观察者模式,当老板进入到研发部宣布个事,譬如发奖金了。大家肯定都会听到,知道要发奖金了。这不就是老板一个人说,大家都收到通知了。典型的一对多了。大家收到老板的通知要发奖金的变化,肯定是工作热情高涨。原创 2016-09-06 23:07:25 · 355 阅读 · 0 评论 -
聊聊代理模式
1.什么是代理模式其实代理模式顾名思义就是使用一个代理类来代替原对象,来进行一些操作。2.生活中的代理譬如刚毕业的小菜,去北京,刚去自己找房子租很困难,要不价格太贵,要不就是很便宜环境不太好,总是没顺心的,便会给中介打电话,这样中介就会帮小菜去找房子,因为中介掌握房源的信息很多很全面,这样找房子的活就由中介代理小菜去找了。这就是一个代理的过程。3.java中的代理有哪些静态代理原创 2016-11-21 23:22:24 · 707 阅读 · 0 评论