设计模式
胖墩的IT
一步一个脚印走下去,相信自己能成功,
学习的3W原则:who,what,which
生活的3W原则:who,what,why
展开
-
简单的工厂模式(也不算工厂模式,就是不让你new,只能通过我的工厂类来new)
工厂模式就是不想让你直接new 它的对象,而是通过工厂里的方法让他给你返回你需要的对象,可以相当于对象的再度封装User类public class User { private String id; private String name; private User() { } private User(String id, String name) { this.id...原创 2019-07-16 22:29:26 · 565 阅读 · 0 评论 -
状态模式(二十)
类的行为是基于它的状态改变的意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类菜鸟案例:我们将创建一个 State 接口和实现了 State 接口的实体状态类。Context 是一个带有某个状态的类。StatePatternDemo,我们的演示类使用 Context 和状态对象来演示 Context 在状态改变时的行为变化。把图拆开一个状态接口,和俩个它...原创 2019-08-14 15:24:27 · 125 阅读 · 0 评论 -
空对象模式(二十一)
一个空对象取代 NULL 对象实例的检查Null 对象不是检查空值,而是反应一个不做任何动作的关系菜鸟案例:我们将创建一个定义操作(在这里,是客户的名称)的 AbstractCustomer 抽象类,和扩展了 AbstractCustomer 类的实体类。工厂类 CustomerFactory 基于客户传递的名字来返回 RealCustomer 或 NullCustomer 对象。Nu...原创 2019-08-14 15:58:36 · 104 阅读 · 0 评论 -
策略模式(二十二)
一个类的行为或其算法可以在运行时更改意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换菜鸟案例:我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的...原创 2019-08-14 16:49:18 · 216 阅读 · 0 评论 -
模板模式(二十三)
一个抽象类公开定义了执行它的方法的方式/模板意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。感觉特别像父类把东西都写好了,你只需要加点东西就成跟自己的要求相同,并形成符合自己条件的类菜鸟案例:我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket...原创 2019-08-14 17:00:28 · 127 阅读 · 0 评论 -
访问者模式(二十四)
我们使用了一个访问者类,它改变了元素类的执行算法元素的执行算法可以随着访问者改变而改变意图:主要将数据结构与数据操作分离。菜鸟案例:我们将创建一个定义接受操作的 ComputerPart 接口。Keyboard、Mouse、Monitor 和 Computer 是实现了 ComputerPart 接口的实体类。我们将定义另一个接口 ComputerPartVisitor,它定义了访问者...原创 2019-08-14 17:38:11 · 104 阅读 · 0 评论 -
UML介绍(学设计模式就要先看懂UML)
转载自UML简介 图片里面有现成的,我就拿来用了,嘻嘻UML主要包括什么其中,案例图、类图和序列图是最有用的。,下面主要介绍这三个,其他的可以百度1、用一个图来介绍UML的类图,把它切割成几部分来介绍,理解(1) 类class的解释看下面这张图如果单独拿出来,它就是一个class类,分成了三层,分别为类名,成员变量,方法名第二层和第三层中的 + 号代表着修饰符时public...原创 2019-08-11 20:23:08 · 446 阅读 · 0 评论 -
设计模式介绍并分类
11转载 2019-08-12 10:37:16 · 87 阅读 · 0 评论 -
单例模式(一)
单例模式需要注意的地方:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。参考菜鸟教程的设计模式单例模式1、懒汉式,线程不安全public class Singleton { //私有静态此对象,那此对象如果存在只能存在一个,由静态来决定的 private static Singleton instance; ...原创 2019-08-12 11:53:29 · 104 阅读 · 0 评论 -
工厂模式(二)
这才是真正的工厂模式,前面的简单工厂模式就是演示一下:一个调用者想创建一个对象,只要知道其名称就可以了,至于里面的逻辑就不需要知道,只需要知道这个名称能获得什么类型的对象就可以它还有两个优点:1、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以2、屏蔽产品的具体实现,调用者只关心产品的接口先来看一个示例图看到这可能有一些模糊,你先看最大的按个方框,它是不是包裹起来个4个部分,...原创 2019-08-12 15:05:03 · 89 阅读 · 0 评论 -
抽象工厂模式(三)
抽象工厂模式你可以认为是在很多工厂模式的外面又套了一个工厂,在此工厂内的逻辑不需要外人知道,只需要知道调用那个方法能获得什么对象就行来个例子:穿衣服一般不穿一套的,上衣需要一个工厂类,裤子需要一个工厂类,而这一套衣服构成了一个抽象工厂下面的示例图仔细看,你肯定能看懂示例图的实现1、最里面的Shape创建接口和实体类public interface Shape { void d...原创 2019-08-12 15:56:20 · 104 阅读 · 0 评论 -
建造者模式(四)
使用多个简单的对象一步一步构建成一个复杂的对象用套餐可以形象的解释这个模式,很多比如可乐,汉堡不变的,但是组合起来就有很多变化看下图菜鸟的案例:我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒(Wrappe...原创 2019-08-12 21:00:55 · 271 阅读 · 0 评论 -
原型模式(五)
是用于创建重复的对象,同时又能保证性能,是通过克隆的模式来创建的,但是分浅克隆和深克隆必须实现 Cloneable 接口深克隆可以实现 Serializable 接口序列化读取二进制流关于应用场景,优点,缺点等等,请参考https://www.runoob.com/design-pattern/prototype-pattern.html看一个原型模式的例子看下图菜鸟的案例我们将...原创 2019-08-12 21:50:10 · 109 阅读 · 0 评论 -
观察者模式(十九)
当对象间存在一对多关系时,则使用观察者模式当一个对象被修改时,则会自动通知它的依赖对象菜鸟案例:观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。我们创建 Subject 类、Observer 抽象类和扩展了抽象类 Observer 的实体类。ObserverPat...原创 2019-08-14 14:38:48 · 269 阅读 · 0 评论 -
备忘录模式(十八)
保存一个对象的某个状态,以便在适当的时候恢复对象意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。怎么这么感觉像MySQL怎么回溯到任意时间:每隔一段时间备份一次,回溯后日志文件也别忘了回溯到同步时间菜鸟案例:备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento 包含了要被恢复的对象的状态。Originato...原创 2019-08-14 12:54:22 · 182 阅读 · 0 评论 -
中介者模式(十七)
是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护怎么说呢,更像一个平台,像房屋中介,房东把房子放那,租房者去中介那看房子,关于租房者和房东之间的联系由中介来管理菜鸟案例:我们通过聊天室实例来演示中介者模式。实例中,多个用户可以向聊天室发送消息,聊天室向所有的用户显示消息。我们将创建两个类 ChatRoom 和 ...原创 2019-08-14 11:45:32 · 167 阅读 · 0 评论 -
java中的代理
代理分为两种:静态代理和动态代理1、静态代理2、动态代理目前我知道的动态代理分为两种:基于JDK的动态代理:代理类和实体类要实现同一个接口基于cglib的动态代理:代理类要继承实体类,第三方的最后目的相同,代理实体类,做一些额外的工作(1)基于JDK的动态代理接口public interface ForumService { void removeTopic(int ...原创 2019-07-21 11:02:09 · 206 阅读 · 0 评论 -
桥接模式(七)
是用于把抽象化与实现化解耦,使得二者可以独立变化涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响菜鸟案例:我们有一个作为桥接实现的 DrawAPI 接口和实现了 DrawAPI 接口的实体类 RedCircle、GreenCircle。Shape 是一个抽象类,将使用 DrawAPI 的对象。BridgePatternDemo,我们的演示...原创 2019-08-13 13:00:13 · 149 阅读 · 0 评论 -
过滤器模式(八)
这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来结合多个标准来获得单一标准菜鸟案例:我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对象的列表。看完图...原创 2019-08-13 14:13:38 · 210 阅读 · 0 评论 -
组合模式(九)
又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。用来表示部分以及整体层次,创建了对象组的树形结构。通俗解释:就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,菜鸟案例:我们有一个类 Em...原创 2019-08-13 14:31:59 · 96 阅读 · 0 评论 -
装饰器模式(十)
允许向一个现有的对象添加新的功能,同时又不改变其结构用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。菜鸟案例:我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。然后我们创建一个实现了 Shape 接口的抽象装饰类 ShapeDecorator,并把 Shape 对象作为它的实例变量。RedShapeDecorator 是实现了 ShapeDeco...原创 2019-08-13 15:08:41 · 128 阅读 · 0 评论 -
外观模式(十一)
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口有点像工厂模式,只需要知道用哪个方法能返回什么对象就行,不过还是有区别的,外观模式在你调用接口的时候你需要的对象都创建好了,例子:比如new一个电脑在 new 电脑的同时把 cpu、内存、硬盘都初始化好并且接好线。对外暴露方法(启动电脑,关闭电脑)。启动电脑(按一下电源键):启动CPU、启动内存、启动硬盘关闭电脑(按...原创 2019-08-13 17:40:59 · 117 阅读 · 0 评论 -
享元模式(十二)
主要用于减少创建对象的数量,以减少内存占用和提高性能尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象换句话说就是共享对象,在某些对象需要重复创建,且最终只需要得到单一结果的情况下使用菜鸟案例:我们将创建一个 Shape 接口和实现了 Shape 接口的实体类 Circle。下一步是定义工厂类 ShapeFactory。ShapeFactory 有一个 Circle 的 Ha...原创 2019-08-13 18:27:48 · 99 阅读 · 0 评论 -
代理模式(十二)
一个类代表另一个类的功能这里只讲代理模式,关于动态代理和静态代理请参考我另一个博客java中的代理菜鸟案例:我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。ProxyPatternDemo,我们的演示类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。...原创 2019-08-13 20:32:14 · 104 阅读 · 0 评论 -
责任链模式(十三)
为请求创建了一个接收者对象的链,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。就想抛出错误信息一样,由内到最外层菜鸟案例:我们创建抽象类 AbstractLogger,带有详细的...原创 2019-08-13 21:03:01 · 113 阅读 · 0 评论 -
命令模式(十四)
以命令的形式包裹在对象中,并传给调用对象意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。菜鸟案例:我们首先创建作为命令的接口 Order,然后创建作为请求的 Stock 类。实体命令类 BuyStock 和 SellStock,实现了 Order 接口,将执行实际的命令处理。创建作为调用对象的类 Broker,它接受订单并能下订单。Broker 对象使用命令模...原创 2019-08-13 22:28:12 · 158 阅读 · 0 评论 -
解释器模式(十五)
提供了评估语言的语法或表达式的方式该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等,我想到了log4j,在用数据库的时候会输出自己写的SQL语句和返回结果菜鸟案例:我们将创建一个接口 Expression 和实现了 Expression 接口的实体类。定义作为上下文中主要解释器的 TerminalExpression 类。其他的类 OrExpression、And...原创 2019-08-14 10:13:46 · 125 阅读 · 0 评论 -
迭代器模式(十六)
是 Java 和 .Net 编程环境中非常常用的设计模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示看到这个我想到了java的foreach,就是按顺序迭代集合和数组里的对象,不需要知道长度,从头到尾迭代菜鸟案例:我们将创建一个叙述导航方法的 Iterator 接口和一个返回迭代器的 Container 接口。实现了 Container 接口的实体类将负责实现 Iterat...原创 2019-08-14 11:35:22 · 117 阅读 · 0 评论 -
适配器模式(六)
是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能例子:读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。相当于一个中间转换的仪器菜鸟案例:我们有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 AudioPlayer。默认情况下,Audi...原创 2019-08-12 22:59:28 · 117 阅读 · 0 评论