- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 Java设计模式之享元模式(Flyweight)
一、概述举两个例子。例子1, A找牛二做了一个轻量小型门户网站,牛二花了几天做好后,租了服务器a,完工。后来,B看到了,觉得不错,也找牛二做了一个这样的网站,牛二就复制了之前的那份代码,租了服务器b,完工。后来C、D......例子2, 做一个围棋游戏,围棋由许许多多的黑子和白子组成,面向对象的思想,每个棋子都是一个对象,这样就需要生成许许多多的对象。A玩这个游戏,生成了n个棋子,如果...
2019-01-02 20:23:45 331
原创 Java设计模式之迭代器模式(Iterator)
一、概述一看到Iterator,相信大家都很熟悉,没错,Iterator就是你们熟悉的它,主要功能就是迭代对象进行遍历,由于它太太太普遍了,所以Java已经将它融为到语言中了。在jdk中也提供了java.util.Iterator接口,并应用于各个集合当中,我们可以用集合中的iterator()方法进行遍历,不需要我们再额外自己去写迭代器的方法了,所以迭代器模式也显得不那么重要了。但其实它算是...
2018-12-26 20:15:17 268
原创 Java设计模式之桥接模式(Bridge)
一、引入桥接模式举个例子,现在有M牌手机,手机里安装了通讯录,这时又有一N牌手机,也安装了通讯录,如何实现。从面相对象的设计原则出发,设计类图如下。 如果此时,两款手机又安装了聊天软件呢。简单写下代码,帮助理解。手机品牌父类/** * 手机品牌抽象父类 */public abstract class IPhoneBrand { public abstra...
2018-12-26 20:15:01 286
原创 Java设计模式之组合模式(Composite)
一、概述我们常常可以看到这样一种形式,比如说电脑中的磁盘管理,我的电脑中有C盘、D盘、E盘,在C盘中又有A文件夹、B文件夹等,在A文件夹下又有A1文件夹、A2文件夹、A3文件等等;再比如说在桌子上有背包、电脑、水杯、书架、笔筒等,在背包里有书、本子、IPad等,在书架上有书A、书B等,在笔筒里有中性笔、钢笔、铅笔、彩笔等;再比如北京公司总部有财务部、人力部、上海分公司、深圳分公司等,在上海分公...
2018-12-22 14:26:48 617
原创 Java设计模式之备忘录模式(Memento)
一、概述当我们打游戏时,如果打boss时挂了,我们希望下次再打boss时,玩家的战斗值能恢复到打boss之前。就是说,我们希望在某一时刻,可以将游戏的各种数据保存,这样当我们需要时,可以恢复到这个状态。这里引入了一种新的模式——备忘录模式。二、备忘录模式1. 定义备忘录模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保...
2018-12-20 09:50:31 278
原创 Java设计模式之适配器模式(Adapter)
一、适配器模式1. 定义适配器模式,将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(引自《大话设计模式》)2. 说明这有点类似生活中用到的电源变压器,可以把电源变成我们所需要的电压。再举个例子,比如我们到国外,听不懂外国人说话,我们需要一个翻译,这个翻译就起到了一个适配器的功能,将我们听不懂的外国语转换成我们可...
2018-12-18 16:58:56 206
原创 Java设计模式之状态模式(State)
1. 引入状态模式(该例子引入《大话设计模式》)作为程序员,加班是家常便饭。我们就每日的工作状态写一下。9:00-11:00 上午上班11:00-13:00 午休13:00-18:00 下午上班18:00 下班18:00 以后 加班用代码表示如下:public class WholeWork { private int hour; private boo...
2018-12-10 16:33:48 281
原创 Java设计模式之观察者模式/发布订阅模式(Observer)
1. 观察者模式1.1 定义观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,是它们能够自动更新自己。(引自《大话设计模式》)1.2 解释观察者模式,又称为发布订阅模式(Publish/Subscribe),顾名思义,发布者发布信息,订阅者接收信息,订阅了就能收到信息,没订阅就不能收到信息。1.3 ...
2018-12-06 15:57:33 312
原创 Java设计模式之建造者模式/生成器模式(Builder)
1. 引入建造者模式这里改变了一下思路,先举一个例子,再总结得出建造者模式的基本结构。建造者,顾名思义,建造产品的人,什么产品呢?假设现在建造一个小人。一个小人,要有头、有身子、有手、有脚。首先来个人,有属性:头、身子、手、脚。public class Person { private String head; private String body; private St...
2018-11-22 19:54:12 323
原创 Java设计模式之外观模式/门面模式(Facade)
1. 外观模式1.1 概述 外观模式比较简单,是应用比较广泛的一种设计模式。 举个栗子说明一下,比如说,现在我在家炒菜,我需要准备菜、调料、油等,然后再下锅炒,最后完成。但是,如果我们去饭店吃,只需要跟服务员说一下菜名,服务员就会为我们提供一份美味佳肴。本来如此繁复的一个工作,现在有了服务员的加入而变得简单,我们不需要和菜、调料等直接接触,也不需要了解具体的细节...
2018-11-20 14:21:45 218
原创 Java设计模式之模板方法模式(TemplateMethod)
1. 模板方法模式1.1 定义模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。(引自《大话设计模式》)1.2 基本结构图1.3 模式理解从类图中可看出,该模式的核心就是继承。举个栗子,可以更加直观的理解。比如说,现在有学生a、学生b,现在学习制作蛋糕,制作蛋糕的步骤大致为:...
2018-11-13 16:48:21 245
原创 Java设计模式之原型模式(Prototype)—— 浅拷贝和深拷贝
1. 原型模式1.1 定义原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。(引自《大话设计模式》)1.2 使用场景这里举例说明一下。比如说现在我要复制一本书。首先,我定义了这本书的相关属性,有书名、价格、作者(一本书可以有多个作者)。package main.mode.yxms;import java.util.ArrayList;publi...
2018-11-02 15:31:50 332
原创 Java设计模式之装饰器模式(Decorator)
1. 简单介绍装饰器模式装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。(引自《大话设计模式》)装饰器模式的结构图如下:逐一介绍一下Component:对象接口,也可以是一个抽象类,是被装饰类和装饰类的基本类型,可以给这些对象动态地添加职责。ConcreteComponent:被装饰类,Component的实现类,是要被进行修饰的对...
2018-10-26 15:50:24 2990 1
原创 Java设计模式之策略模式(Strategy)
1. 策略模式策略模式,它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。(引自《大话设计模式》)如果一个项目中,需要用到大量的算法就可以考虑使用策略模式。举例说明:商场收银软件,客户购买商品,计算价格,要考虑到打折促销的情况。上类图抽象策略类,定义了所有支持的算法的公共接口package main.mode.clm...
2018-10-23 09:56:42 223
原创 Java设计模式之抽象工厂模式的改进
抽象工厂模式在我的上一篇博文里已经详细介绍过,地址:https://blog.csdn.net/zaoan_2010/article/details/81987011它的缺点主要体现在,需要新增产品时,做的改动比较多。针对这个缺点对抽象工厂模式做了一个改进。1. 简单工厂+抽象工厂举例说明:工厂需要生产中性笔和铅笔,中性笔有晨光牌和得力牌的。现如果需要增加油笔的生产,则需要增加油笔的抽...
2018-10-10 19:44:13 919
原创 Java设计模式之工厂模式-简单工厂模式、工厂方法模式、抽象工厂模式
1. 简单工厂模式 举例说明:实现一个计算器的功能先上类图,如下: 首先是一个运算类(Operation),它主要包含一个方法(getResult()),用于计算所得结果,然后加减乘除分别继承它,这样便于扩展,如果增加一个乘方的算法,我们只要增加一个子类去继承Operation即可。再增加一个工厂类(OperationFactory) ,用来实现创建实例的过程...
2018-10-10 11:11:20 350
原创 maven中使用junit提示找不到junit包
在maven项目中,在src/test/java下建立JUnit Test Case测试类,在方法上面加入@Test注释提示找不到junit包import org.junit.Test; import junit.framework.TestCase;public class UserTest extends TestCase { @Test public void test_se...
2018-04-22 21:58:07 24285 7
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人