设计模式
含低调
一个梦想是成为教师的程序员
展开
-
19. 解释器模式+设计模式七大原则
19 解释器模式java与模式:979,design pattern:162原创 2020-03-25 23:00:40 · 167 阅读 · 0 评论 -
18. 备忘录模式
18 备忘录模式在不破坏封装的前提下(双重接口),捕获一个对象(Originator)的内部状态(state),并在该对象之外(Caretaker)保存该状态。这样以后就可将该对象恢复到原先保存的状态类图18.1 双重接口问题所谓双重接口,就是对某一个对象提供宽接口,而对另一个对象提供窄接口如果对象提供一些公开接口以提供其内部状态,会产生外部代码直接利用这些接口,修改此对象,双重...原创 2020-03-25 22:55:30 · 125 阅读 · 0 评论 -
17. 原型模式
17 原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象类图17.1 使用场景类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源。因为java中原型模式是在内存二进制流的拷贝,性能比new创建对象更高通过new产生一个对象需要非常繁琐的数据准备或访问权限(比如还得先去数据库查某个属性值,才能创建对象)一个对象需要提供给其他对象访问,而且各个调用者都可能...原创 2020-03-24 22:34:00 · 74 阅读 · 0 评论 -
16. 桥接模式
16 桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化强关联:在编译期就已经确定的,无法在运行时动态改变的关联,继承是强关联,聚合是弱关联类图16.1 使用场景...原创 2020-03-24 17:30:31 · 75 阅读 · 0 评论 -
15. Builder模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示使用建造者模式可以将一类产品的构建过程和细节进行封装(实现代码的复用)与产品的表示进行分离,即:使用同样的构建过程可以创建不同的产品;在各个建造者类,只需定义生产零件方法,具体的生产顺序定义在导演类中;...原创 2020-03-23 22:23:30 · 93 阅读 · 0 评论 -
14. 责任链模式
14 责任链模式多个对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理该请求。发送这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任类图14.1 代码Handlerpackage chainofresponse.pattern;public abstrac...原创 2020-03-23 21:54:34 · 96 阅读 · 0 评论 -
13. 访问者模式
表示一个作用于某对象结构(ObjectStructure)中的各元素(NodeA、NodeB)的操作(visitor最后会对所有元素都进行操作)。它使你可以在不改变各元素的类的前提下,定义作用于这些元素的新操作(新增Visitor实现类即可)封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变封装一些作用于某种数据结构的各元素的操作,它可以...原创 2020-03-22 22:41:30 · 103 阅读 · 0 评论 -
12. 享元模式
享元模式以共享的方式高效地支持大量的细粒度对象享元,就是共享元数据,允许对小对象进行重复利用,防止新建出来好多重复的小对象类似于对内蕴状态相同的对象,只创建一次实例的"单例"String类型就使用了享元模式,如果一个系统有两个String对象包含字符串相同,JVM实际上只创建一个String对象提供给两个引用,从而实现String对象的共享,String的intern方法会获取到指向常量池...原创 2020-03-22 17:34:09 · 89 阅读 · 0 评论 -
11. 代理模式
11.1 代理模式代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,其实就是将客户对主题(Subject)施加的方法调用拦截下来类图11.1.1 应用场景远程代理实现本地调用者与远程被调用者之间的正常交互屏蔽了网络细节虚拟代理:控制创建开销大的资源保护代理基于权限控制对资源的访问缺点:代理会造成设计中类的数目增加11.1.2 代理模式与装饰者...原创 2020-03-22 10:53:12 · 89 阅读 · 0 评论 -
10. 状态模式
10 状态模式状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类该模式与策略模式类图一模一样,但目的不同类图10.1 应用场景为很好的替换复杂的if…else语句10.2 对象内状态建模的通用技巧通过创建一个实例变量来持有状态值,并在方法内书写条件代码来处理不同状态,这种方式会产生大量if…else代码,造成维护复杂10.3 代码Statepac...原创 2020-03-22 09:37:43 · 95 阅读 · 0 评论 -
9. 迭代器与组合模式
9.1 迭代器提供一种方法顺序访问一个聚合(数组、集合)对象中的各个元素,而又不暴露其内部的表示就是将访问聚合的逻辑抽象成一个迭代器,而不需要聚合本身提供访问方法,简化聚合的接口和实现,让责任各得其所可以在不修改聚合本身情况下,就可以修改迭代方式(对指定元素添加过滤)可以在不修改迭代方式的情况下,修改使用的聚合类型(数组改为Collection)类图9.1.2 代码Me...原创 2020-03-21 22:55:16 · 102 阅读 · 0 评论 -
8. 模板方法模式
8 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤类图8.1 应用场景8.2 代码CaffeineBeveragepackage template.pattern;public abstract class CaffeineBeverage { //1.模板方法,定义为fina...原创 2020-03-21 22:05:11 · 77 阅读 · 0 评论 -
7. 适配器模式、外观模式、中介者模式
7.1 适配器模式将一个类的接口(Adaptee)转换成客户期望的另一个接口(Target)。适配器让原本接口不兼容的类可以合作无间类图7.1.1 应用场景要使用一个现有的类(WildTurkey)而其接口(Turkey)不符合你的需求(Duck)时,使用适配器(Adapter)代码WildTurkey turkey = new WildTurkey();//如下代码不允许...原创 2020-03-21 21:35:26 · 307 阅读 · 0 评论 -
6. 命令模式
6 命令模式将"请求"封装成对象(这样可以将命令的发起者(Invoker)与执行者(Receiver)解耦),从而使你可用不同的请求对客户进行参数化。可以对请求排队、记录请求日志、支持可撤销的操作6.1 应用场景将请求排队执行记录请求的日志支持可撤销的操作6.2 缺点会导致存在过多的具体命令类6.3 代码命令模式类图Commandpackage command.pa...原创 2020-03-19 23:17:47 · 90 阅读 · 0 评论 -
5. 单例模式
5 单例模式确保一个类只有一个实例,并提供一个全局访问点5.1 应用场景线程池、缓存、注册表等只能有一个实例的对象5.2 代码饿汉式package com.mashibing.dp.singleton;/** * 饿汉式 * 类加载到内存后,就实例化一个单例,JVM保证线程安全 * 简单实用,推荐使用! * 唯一缺点:不管用到与否,类装载时就完成实例化 * Class...原创 2020-03-19 22:50:34 · 115 阅读 · 0 评论 -
4. 工厂模式
4.1 简单工厂模式不能算是一种设计模式,只是将创建对象与客户端分离,其实就是effective java说的静态工厂方法4.1.1 应用场景将对象创建过程隐藏(封装)4.1.2 代码类图4.2 工厂模式定义一个用于创建对象的接口(MouseFactory),让其子类(HpMouseFactory)决定实例化哪个类(HpMouse),工厂方法让类把实例化推迟到子类4.2.1 ...原创 2020-03-19 22:46:05 · 88 阅读 · 0 评论 -
3. 装饰者模式
3 装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案3.1 应用场景为输入流动态增加将读取到内容转为小写的功能不修改"咖啡类"代码的前提下,扩展"咖啡类"功能,使其可以计算出加上配料之后的价格,新功能是通过在旧功能前面或后面做一些计算来添加的Beverage beverage= new Espresso();System.out.println...原创 2020-03-19 22:13:50 · 70 阅读 · 0 评论 -
2. 观察者模式
2 观察者模式观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象(主题)状态改变,它的所有依赖者(观察者)都会收到通知并自动更新主题+观察者=观察者模式类图2.1 应用场景WeatherData(主题的实现)修改其属性temperature、humidity、pressure值时,它的集合类型的属性observers中所有对象(所有注册该主题的观察者对象),都调用自身upd...原创 2020-03-19 21:39:47 · 88 阅读 · 0 评论 -
1. 策略模式
1 策略模式策略模式定义了算法族,分别封装起来,让他们之间可以相互替换(实现接口),此模式让算法的变化独立于使用算法的客户(组合+委托)1.1 应用场景Duck mallardDuck = new MallardDuck();//1. 需要思考,如何保证当前(客户端)代码不变前提下//2. performFly方法具体执行内容,可以任意变换mallardDuck.performFly(...原创 2020-03-19 14:42:15 · 99 阅读 · 0 评论