![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
HappyYiqin
这个作者很懒,什么都没留下…
展开
-
JAVA实现状态模式
环境: 旅馆住宿系统房间状态有三种:空闲、预定、入住,状态不同时所能做的操作也不一样,如下图。可以在房间类中加入大量的if-else语句判断状态,但是代码质量差,而且添加状态时要对代码进行修改,不符合“开闭原则”问题: 某对象发生变化时,其所能做的操作也随之变化解决方案:状态模式角色: 环境类:房间类Room 抽象状态类:状态接口State,定义基本的操作 具体状态类:状态实现类 Fre...原创 2018-04-04 21:26:51 · 1540 阅读 · 0 评论 -
JAVA实现原型模式
环境: 邮件复制功能,邮件对象包含的内容较多(发送者、接收者、标题、内容、日期等),对于已经创建好的邮件对象,可以通过复制的方式创建一个新的邮件对象,如果需要改变某部分内容,无须修改原始的邮件对象,只需要修改复制后得到的邮件对象即可问题: 需要创建多个相同或者相似的对象且各对象之间是相互独立的,这个类结构复杂(如构造函数极复杂),使用New实例化对象耗时长,代价高解决方案: 通过复制现有的对...原创 2018-04-04 21:25:21 · 1105 阅读 · 0 评论 -
JAVA实现装饰模式
环境:汽车4s店汽车销售,出售奥迪A1,A4,A6。可装饰的组件有倒车雷达,真皮座椅,GPS定位。有一辆裸车,要实现对裸车的装饰分析:买车的人需求各不一样,有的人要奥迪A1装有雷达、GPS,有的人要奥迪A4装有真皮座椅、GPS等等。如果你把所有的可能情况都例举出来,就会出现“类爆炸”的现象,显然这是不合理的。问题:动态的给一个对象添加一些功能扩展解决方案:装饰模式角色:装饰者 被装饰者C...原创 2018-04-04 21:23:20 · 429 阅读 · 0 评论 -
JAVA实现代理模式
环境:一个红酒厂商,是不会直接把红酒零售给客户的,都是通过代理来完成他的销售业务。而客户也不用为了购买红酒而到处找工厂,他只要找到厂商在当地的代理就行,具体红酒工厂在那里,客户不用关心,代理会帮他处理。问题:一个客户不想或者不能直接引用另一个对象,此时可以通过一个“中介”来实现间接引用,这个起中介作用的对象就是代理对象。可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。解决方...原创 2018-04-04 21:21:48 · 363 阅读 · 0 评论 -
JAVA实现迭代器模式
环境:家里多台电视机会配有多个遥控器,我们希望有一个万能遥控器,它能操作多台电视。问题:访问一个聚合对象的内容而无需暴露它的内部,为遍历不同的聚合结构提供一个统一的接口(同一种算法在多种集合对象上进行操作)。解决方案:迭代器模式——为容器而生角色: 抽象集合 具体集合 抽象迭代器:规定了遍历具体集合的方法,比如next() 具体迭代器java代码Iterator接口Tele...原创 2018-04-04 21:20:32 · 473 阅读 · 0 评论 -
JAVA实现适配器模式
环境:游戏中的坐骑五彩神鹿,它原本只是可以跑的鹿,为了增加游戏的可玩性,我们希望鹿可以飞。 分析一下,很明显会有一个五彩神鹿的类,里面有一个跑的方法。如果我们直接将飞的方法放在鹿类中是符合环境要求的,但从设计模式来看,这违背了开闭原则(对扩展开放,对修改封闭),是不可取的。 问题:想使用一个已经存在的类,但他的接口不符合需求。要让两个不能通讯的类通讯,让类功能扩展 解决方案:适配器模式角色:...原创 2018-04-04 21:19:02 · 2436 阅读 · 1 评论 -
JAVA实现观察者模式
环境:新学期某课程的第一节课,老师自我介绍,并将联系电话告之学生,全班学生记录老师的电话号码。有天该老师的电话号码改了,全班学生保存的电话号码也要相应的修改。问题:某对象发生变化时,其他对象做出调整解决方案:观察者模式角色: 观察者:学生 被观察者:老师设计类图UML类图之间的关系有哪些,可以参考:http://kb.cnblogs.com/page/129490/Observer.j...原创 2018-04-04 21:16:54 · 236 阅读 · 0 评论 -
JAVA实现单例模式
环境:一个教室只有一块黑板,不管上Java课,还是Android课,或者项目管理课的老师都只使用这一块黑板问题:希望一个类只能有一个实例存在解决方案:单例模式、static单例模式有很多种写法第一种:这种方式是非线程安全的,于是我们想到Synchronized修饰符这种方式虽然可以保证不会出线程问题,但是除了第一次调用时执行了构造函数之外,以后每次调用直接返回instance对象,会耗时在同步准备...原创 2018-04-04 21:03:23 · 687 阅读 · 0 评论 -
面向对象设计原则
好设计的原则单一职责原则要求在软件系统中,一个类只负责一个功能领域中的相应职责。开闭原则要求一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展一个系统的行为。里氏代换原则可以通俗表述为在软件中如果能够使用基类对象,那么一定能够使用其子类对象。依赖倒转原则要求抽象不应该依赖于细节,细节应该依赖于抽象;要针对接口编程,不要针对实现编程。接口隔离原则要求客户端不应该依赖那些它不需要的接...原创 2018-04-04 20:52:38 · 86 阅读 · 0 评论