设计模式
文章平均质量分 54
设计模式
松仔log
初出茅庐的程序员
展开
-
设计模式——访问者模式
表示一个作用于某对象结构中的各元素的操作,它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作。原创 2023-09-20 19:51:22 · 411 阅读 · 0 评论 -
设计模式——解释器模式
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。当有一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。如匹配字符串的正则表达式,解释器为其定义了一个文法用于表示和解释正则表达式。使用时,遇到变量压入栈,遇到符号弹出并计算结果再压入栈。如下,将“a+b-c+d”解释为1+5-2+3。创建接口Expression。创建变量解释器,返回。原创 2023-09-20 18:41:42 · 370 阅读 · 0 评论 -
设计模式——享元模式
打印如下,当使用new时,创建的对象地址不一样,当直接赋值时,s4的引用指向字符串"s"创建工厂维护WebSite,第一次创建时存起来,此后返回已创建的对象。实际上不可能为每个商家都新建一个网站实例,不同网站之间只有数据不同。当使用时,从工厂中取出WebSite,为其设置数据。如淘宝中每个店家的网站有首页、分类、会员等。抽象WebSite,展示的时候传入数据加载。运用共享技术有效地支持大量细粒度的对象。String的实现就是运用了享元模式。原创 2023-09-20 14:53:28 · 372 阅读 · 0 评论 -
设计模式——中介者模式
如没有联合国之前,国与国沟通需要建立联系,当国家增多时,形成网状结构错综复杂,当引入联合国这个中介时,它们就不必直接通信,变为星状结构。用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。把交互复杂性变为中介者的复杂性,当出现多对多交互时,需先考虑设计是否合理再采用中介者模式。Country类,内部维护UnitedNations,每个子类都有发送和接收信息。UnitedNations作为中介者,具体子类处理信息的传递。原创 2023-09-20 10:59:10 · 252 阅读 · 0 评论 -
设计模式——职责链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象练成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。如请假请求需要主管、经理、总经理批准。原创 2023-09-19 20:07:23 · 336 阅读 · 0 评论 -
设计模式——桥接模式
当新增功能或品牌时,只需要新增一个类,不会影响其他的类。将抽象部分与它的实现部分分离,使它们都可以独立地变化。当新增功能时,每个品牌都要新增一个类。当新增品牌时,每个功能也要新增一个类。创建Soft及其子类游戏和通讯录功能。每个手机品牌都拥有游戏和通讯录功能。创建品牌类,将Soft作为域。原创 2023-09-19 18:28:32 · 475 阅读 · 0 评论 -
设计模式——备忘录模式
在不破坏封装性的前提下,捕获一个对的的内部状态,并在该对象之外保持这个状态。这样以后就可将该对象恢复到原先保持的状态。如游戏打Boss失败时回档,定义一个游戏角色。当挑战Boss失败后,通过此前的复制还原状态。修改GameRole类,添加备份/还原方法。在挑战Boss前,复制一份当前的状态。创建备忘录,添加要保存的数据。创建它们之间的管理类。原创 2023-09-18 20:16:44 · 393 阅读 · 1 评论 -
设计模式——建造者模式
利用构建器模式代替多参构造器构造器和构建器模式是什么?原创 2022-03-18 16:03:47 · 2441 阅读 · 0 评论 -
设计模式——原型模式
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原创 2023-09-16 11:19:36 · 286 阅读 · 0 评论 -
设计模式——代理模式
代理模式代理模式是什么?代理模式解决什么问题?代理模式实现远程代理制作远程接口制作远程接口的实现利用rmic产生Stub和Skeleton启动RMI registry开启远程服务调用过程虚拟代理保护代理代理模式是什么?代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问,分为远程代理:控制访问的远程对象虚拟代理:控制访问创建开销大的资源保护代理:基于权限控制对资源的访问代理模式解决什么问题?使用代表对象控制某对象的访问,帮助处理某些细节(网络、异常)代理模式实现远程代理制作原创 2021-08-18 08:55:24 · 73 阅读 · 0 评论 -
设计模式——状态模式
状态模式状态模式是什么?状态模式解决什么问题?状态模式实现状态模式是什么?状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。状态模式解决什么问题?现有自助售货机VendingMachine,通过构造函数控制商品数量,内部通过if语句完成对不同状态的操作,有四种状态:未投币已投币正在购买已卖完class VendingMachine { final static int SOLD_OUT = 0; final static int NO_COIN原创 2021-08-17 08:59:21 · 65 阅读 · 0 评论 -
设计模式——组合模式
组合模式组合模式是什么?组合模式解决什么问题?组合模式实现组合模式是什么?组合模式解决什么问题?组合模式实现原创 2021-08-16 11:42:31 · 154 阅读 · 0 评论 -
设计模式——迭代器模式
迭代器模式迭代器模式是什么?迭代器模式解决什么问题?迭代器模式实现迭代器接口迭代器实例用于创建迭代器的接口用于创建迭代器的实例迭代过程迭代器模式是什么?迭代器模式解决什么问题?现有MenuItem作为菜单项,BreakfastMenu采用ArrayList实现,LunchMenu采用数组实现:class MenuItem { private String name; private Double price; public MenuItem(String name, Dou原创 2021-08-12 16:55:50 · 156 阅读 · 0 评论 -
设计模式——模板方法模式
模板方法模式模板方法模式是什么?模板方法模式解决什么问题?模板方法模式实现模板方法模式是什么?模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法模式解决什么问题?现有冲泡coffee和tea的类:public class coffee { void prepare() { boilWater(); brewCoffee(); pourInCu原创 2021-08-12 11:12:21 · 65 阅读 · 0 评论 -
设计模式——外观模式
外观模式外观模式是什么?外观模式解决什么问题?外观模式实现外观模式是什么?外观模式提供了统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。外观模式解决什么问题?现有Projector和Light:class Projector { public void ProjectorOn() { System.out.println("开投影仪"); } public void ProjectorOff() { Sy原创 2021-08-12 09:46:31 · 63 阅读 · 0 评论 -
设计模式——抽象工厂模式
抽象工厂模式抽象工厂模式是什么?抽象工厂模式解决什么问题?抽象工厂模式实现抽象工厂模式是什么?抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指明具体类。抽象工厂模式解决什么问题?榨果汁需要原材料,材料可能来自全国各地:class Apple { String name;}class GuangdongApple extends Apple { public GuangdongApple() { name = "广东苹果"; }}原创 2021-08-12 08:58:16 · 59 阅读 · 0 评论 -
设计模式——适配器模式
适配器模式适配器模式是什么?适配器模式解决什么问题?适配器模式实现适配器模式是什么?适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器模式解决什么问题?我国的电压为220V,但外国的电压大多为110V,导致我国的电器设备在国外开不了机,或者国外的电器设备在我国因电压太大导致报废,此时就需要适配器将电压进行转换。适配器模式实现现有Person和Robot接口及它们的实现类:interface Person { void Wear();原创 2021-08-11 16:15:16 · 107 阅读 · 0 评论 -
设计模式——命令模式
命令模式命令模式是什么?命令模式解决什么问题?命令模式实现命令接口命令实现空命令命令调用者命令过程组合命令组合和命令过程命令模式是什么?命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。命令模式解决什么问题?现有智能家居Tv和Light,万能遥控器可以控制家居,遥控器每排有开关两个按钮,最后还有一个撤销按钮,假设第一排的开关用于Tv,第二排的开关用于Light:class Tv { public void TvOn() {原创 2021-08-11 14:01:24 · 151 阅读 · 0 评论 -
设计模式——单例模式
单例模式单例模式是什么?单例模式解决什么问题?单例模式实现1单例模式实现2单例模式实现3单例模式实现4(推荐)单例模式是什么?单例模式确保一个类只有一个实例,并提供一个全局访问点。单例模式解决什么问题?创建全局变量(类加载才会创建):public static int GLOBAL_VARIABLE;program1:全局变量创建时需要赋值program2:无法延迟加载单例模式实现1创建私有静态变量私有化构造函数暴露公有方法返回public class Singleton原创 2021-08-11 09:11:48 · 124 阅读 · 0 评论 -
设计模式——工厂方法模式
工厂模式工厂方法模式工厂方法模式是什么?工厂方法模式解决什么问题?简单工厂实现工厂方法模式实现有何区别?抽象工厂模式抽象工厂模式是什么?抽象工厂模式解决什么问题?抽象工厂模式实现工厂方法模式工厂方法模式是什么?工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化延迟到子类。工厂方法模式解决什么问题?现有一家果汁店,原本只经营一种果汁,顾客通过orderJuice()方法点果汁:public class Juice { public void Bo原创 2021-08-10 16:39:40 · 133 阅读 · 1 评论 -
设计模式——装饰者模式
装饰模式装饰者模式是什么?装饰者模式是什么?装饰者模式实现装饰者模式是什么?装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者模式提供了比继承更有弹性的代替方案。装饰者模式是什么?装饰者模式实现...原创 2021-08-09 17:12:36 · 109 阅读 · 0 评论 -
设计模式——观察者模式
观察者模式观察者模式是什么?观察者模式解决什么问题?观察者模式实现观察者模式是什么?观察者模式解决什么问题?观察者模式实现原创 2021-08-09 14:14:06 · 83 阅读 · 0 评论 -
设计模块——策略模式
策略模式策略模式是什么?策略模式解决什么问题解决办法1策略模式实现策略模式是什么?策略模式解决什么问题如下继承结构中,父类Animal的两个通用方法会被子类(Dog、Chicken)继承:public class Animal{ public void quack(){ System.out.println("会叫"); } public void run(){ System.out.println("会跑"); }}clas原创 2021-08-06 10:32:11 · 105 阅读 · 0 评论