设计模式分为三类,请说明三者的作用
(1)创建型:功能是用于创建对象。
【单例模式、抽象工厂模式、工厂模式、原型模式、建造者模式】
(2)结构型:用于处理类或对象的组合,形成更大的结构,功能是组合代替、类与类之间的关系。
【桥接模式、适配器模式、组合模式、代理模式、装饰模式、外观模式、享元模式】
(3)行为型:用于描述对象和类如何交互和分配职责,功能是关注对象和行为的分离。
【中介者模式、访问者模式、解释器模式、观察者模式、命令模式、状态模式】
创建型
抽象工厂模式:提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类。
原型模式:允许对象在不了解细节的情况下创建自定义对象。
Builder模式:将复杂对象的构建与表示分离。
结构型
桥接模式:就抽象部分和它的实现部分分离,使它们都可以独立变化,如不同的宣传产品和具体所采用的出版方式之间。
适配器模式:对于希望使用已存在的类,但接口不符合需求的情形。【公司调用不同商品供应商提供的税率计算类,每个供应商提供了不同的调用方法,如果公司更换了供应商,可增加一个类作为适配器,转换类的接口到客户端期望的另一个接口】
外观模式:外部和子系统的通信必须通过一个统一的外观对象进行。为子系统中的一组接口提供一个一致的界面。
装饰模式:动态给一个对象添加一些额外的职责而无须修改此对象的结构。
行为型
中介者模式:一个后端数据模型能被多个前端用户界面连接,采用中介者最合适。
命令模式:为了支持灵活的撤销和重做行为,抽象出待执行的动作以参数化某对象。
解释器模式:描述了如何定义一个文法,如何在该语言中表示一个句子以及如何解释这些句子。
访问者模式:用户在不改变各元素的类的前提下,定义作用于这些元素的新操作。
策略模式:实现算法的灵活选择和替换,算法根据使用它的客户而变化。【公司搞促销活动,根据不同的订单和商品,提供不同的促销方式】
实例
- 某系统的子模块需要为其他模块提供访问不同数据库系统的功能,访问接口有一定的差异,访问过程却是相同的。可以采用外观模式来抽象出相同的数据库访问过程,该设计模式为子系统定义了一个高层接口,这个接口使得这一子系统更加容易使用。
- 导弹弹道计算需要实时得知结果,及时采用纠偏手段,采用调用/返回风格。
- 交易网站的用户行为分析需要分析离线用户行为日志,适合采用批处理风格。
- 在线语言翻译需要同时考虑多种语言甚至是方言的可能性,适合采用黑板风格。
- 某系统中的文本显示类和图片显示类都继承了组件类,分别显示文本和图片内容,现需构造带有滚动条或者带有黑色边框,但希望最多只增加三个类,适合采用装饰模式。
- 某公司开发一个文档编辑器,该编辑器允许在文档中直接嵌入图形对象,但开销很大。用户在系统设计之初提出编辑器在打开文档时必须十分迅速,可以暂时不显示当前页面以外的图形,针对这个需求,可以采用代理模式来避免同时创建这些图形对象。代理模式可以解决直接访问带来的开销问题。