- 博客(17)
- 资源 (14)
- 收藏
- 关注
原创 重温设计模式之命令模式
命令模式 Command Pattern将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。小明的西餐店正式开业了,为了提高点餐体验和效率,他凭借程序员的经验,引入设计模式来设计点餐流程。这次,用到的是命令模式。看图:命令模式的优点是降低请求者(Waiter)和接收者(Chef)的耦合度,服务员知道菜单就可以了,...
2019-10-29 20:15:39 281
原创 重温设计模式之备忘录模式
备忘录模式 Memento Pattern在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。小明开披萨外卖店攒了一点钱,开始动心想开一家真正的西餐厅,不过这是一笔大投资,弄不好会赔掉全部积蓄,还要搭上时间。如果人生失败后能重来就好了。正在纠结的时候,忽然天上来了一位仙人,对他说:孩子,你尽管大胆的去尝试吧,如果失败了,我来帮你回到现在。嗯,让我先保...
2019-10-24 23:22:10 223
原创 重温设计模式之桥接模式
桥接模式 Bridge Pattern将抽象部分与实现部分分离,使它们都可以独立的变化。小明的披萨外卖店生意越来越好,制作披萨的速度已经赶不上订单的速度,小明决定买几台自动披萨机来代替人工。一番考察后,M品牌的披萨机和符合小明的需求。它有制作不同口味的多种机器,每种机器都可以更换大中小三种烤箱,分别烤出12寸、9寸和6寸的披萨。以后如果有新口味的要求,再买一台新披萨机就可以,原来的...
2019-10-24 20:06:15 229
原创 重温设计模式之状态模式
状态模式 State Pattern允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。在生产流水线上,每个岗位的工人完成自己的步骤后,产品状态发生变化,工人会交给下一环节处理。如果用代码来描述一条披萨生产流水线,可以用状态模式。Pizza类为Context角色,它封装了客户端感兴趣的处理和查看状态接口,并将与状态相关的操作委托给当前状态对象(Cook)来处理。...
2019-10-23 23:05:44 225
原创 重温设计模式之模板方法模式
模板方法模式 Template Pattern定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。回到小明的披萨店。见建造者模式经营一段时间后,小明开始思考如何降低人力成本,他意识到,如果能够通过规则保证每个步骤的正确执行,就不需要额外的监督员;而且制作披萨的加芝士和烘焙步骤,两种披萨是一样的,是否可以考虑合...
2019-10-21 11:07:30 228
原创 重温设计模式之适配器模式
适配器模式 Adapter Pattern将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。中国的标准电压是220V,但是很多国家如美国、日本是110V,去这些国家旅行时为了能给手机等设备充电,需要准备一个转换器,把110V电压转换为220V电压,这就是一种适配器模式。那么在外观模式中提到的万能读卡器算不算适配器模式呢?...
2019-10-20 12:14:19 190
原创 重温设计模式之组合模式
组合模式 Composite Pattern将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式用于构建树形结构,如文件目录、组织关系等。关键代码是继承父类并且包含一个父类的集合。UML图:代码:import java.util.ArrayList;import java.util.List;publ...
2019-10-19 20:41:52 220
原创 重温设计模式之代理模式
代理模式 Proxy Pattern为其他对象提供一种代理以控制对这个对象的访问。在部署Web应用时,通常都会使用Nginx作为反向代理,这种模式下,在浏览器看来把HTTP请求发给Nginx和Tomcat得到的结果是相同的。UML图:代码:public interface WebServer { String getHttp();}public clas...
2019-10-17 21:16:18 189
原创 重温设计模式之外观模式
外观模式 或称门面模式Facade Pattern为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。万能读卡器是一个外观模式在生活中的应用。便携存储卡有SD卡、CF卡、TF卡等多种类型,想让电脑支持所有的卡类型,需要预设一排各种各样的接口。使用万能读卡器后,只要设置USB接口就可以了。如果用代码来描述这一过程,就是标准的...
2019-10-17 20:29:40 189
原创 重温设计模式之原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。如果玩过魔兽争霸3都知道剑圣有一个技能叫镜像,分裂出两个和自身属性一样的假剑圣,只是没有攻击力。考虑一下创建假剑圣的过程,剑圣有等级、力量、敏捷、智力等可变属性,如果用new的方式创建,则需要把每个属性重新设置一遍。BladeMaster fake1 = new BladeMaster();fake1.setLeve...
2019-10-16 19:27:16 189
原创 重温设计模式之观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。需求:在用户上线时,有各种各样的事情要处理:发一封欢迎信、增加登录积分、查询未读邮件数做提示、提醒修改密码,并且随时会增加新的需求或者删除过时功能。UML图:代码:public class LoginEvent extends EventObject { pub...
2019-10-15 21:15:24 191
原创 重温设计模式之建造者模式
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。看做外卖生意赚钱容易,小明也开了一家披萨外卖店。做披萨通常需要制作面饼、加馅料、加调味酱、加芝士和烘焙5个步骤,为了提高效率,小明组建了“披萨流水线”,每条流水线5个人,分别负责5个步骤;两组流水线分别制作水果披萨和海鲜披萨。为了协调流水线的生成,保证每个步骤都被执行到位,小明又聘请了专门的监督员来监督整个制作过程。...
2019-10-14 20:49:40 236
原创 重温设计模式之策略模式
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。假设需求是做数组排序,但是需求方并没有想好用哪种算法,为了应对自如,我们先写好冒泡、归并和快速三种算法,并且通过设计模式让客户端可以随意替换。UML图:代码:public interface Sorter { void sort(int[] numbers);}public class B...
2019-10-13 18:32:06 224
原创 重温设计模式之装饰(器)模式
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。以用滤镜处理图片的行为模式为例,其特点是:1 滤镜有多种且可持续增加新类型2 用户加滤镜的顺序是随机的3 每次加滤镜需要叠加之前滤镜的效果如果用装饰模式来表现,那么UML图是:代码:public interface Picture { void show();}pub...
2019-10-12 10:55:09 185
原创 重温设计模式之单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。UML图:实现代码:懒汉式public class LazySingleton { private static LazySingleton instance; private static Object lock = new Object(); private LazySingleton()...
2019-10-11 20:49:48 195
原创 重温设计模式之抽象工厂模式
在使用工厂方法模式时,如果工厂很多,那么在变更子类类型时就要修改多个工厂,复杂且容易出错。一个解决办法就是使用抽象工厂模式,建造一个生产工厂的工厂。抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。UML图:代码:public interface EmployeeDao { Employee selectById(int id);}...
2019-10-09 18:51:17 238
原创 重温设计模式之工厂(方法)模式
在简单工厂模式中,当增加新的实体对象时,需要修改工厂类的switch代码块,容易出错,违反开放-封闭原则。针对于此,可以改成为每个实体对象创建一个工厂类,即为工厂(方法)模式。UML图:代码:public interface EmployeeDao { Employee selectById(int id);}public class EmployeeDao...
2019-10-08 14:41:16 230
SpringCloudAlibabaDemo02.zip
2019-05-14
payment-service.zip
2019-05-13
使用quartz实现不重启服务器修改自定义配置的示例
2017-01-17
Maven+SpringMVC+Mybatis项目搭建示例完整版
2016-07-27
Maven+SpringMVC+Mybatis自定义分页查询标签
2016-07-25
通过Maven的聚合和继承特性创建多模块项目示例
2016-07-18
基于Maven搭建Spring+Mybatis项目的简单示例
2016-07-14
Redis有序集合类型(SortedSet)常用命令演示和实践练习代码
2016-06-23
Redis集合类型(Set)常用命令演示和实践练习代码
2016-06-22
使用ZooKeeper实现软负载均衡示例
2016-06-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人