Design Patterns Tips

2024-05-10 10:18
文章标签 patterns design tips

本文主要是介绍Design Patterns Tips,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    模式是在某情境下,针对某问题的某种解决方案。设计模式是解决某些经常重复发生的设计问题的一些通用解决方案。

一、模式简介

1、策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

2、观察者模式:定义了对象之间的一对多依赖,当一个对象改变时,它的所有依赖者都会收到通知并自动更新。

3、装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

4、工厂方法模式:定义了一个创建对象的接口,由子类决定要实例化哪个类。工厂方法让类把实例化推迟到子类。

5、抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

6、单件模式:确保一个类只有一个实例,并提供一个全局的访问点。

7、命令模式:将"请求"封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。

8、适配器模式:将一个类的接口,转换成客户期望的另一个接口。

9、外观模式:提供一个统一的接口,用于访问子系统中的一群接口。外观定义了一个高层接口,让子系统更易使用。

10、模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

11、迭代器模式:提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示。

12、组合模式:允许将对象组合成树形结构来表现"整体/部分"层次结构。组合能让客户以一致的方式处理个别对象及对象组合。

13、状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

14、代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问。被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。

15、桥接模式:通过将实现和抽象放在两个不同的类层次中而使它们可独立改变。

16、生成器模式:封装一个产品的构造过程,并允许按步骤构造。

17、责任链模式:使一个以上的对象有机会能够处理某个请求。每个对象依次检查此请求,并对其进行处理,或者将它传给链中的下一个对象。

18、蝇量模式:使某个类的一个实例能用来提供许多"虚拟实例"(这些实例能被同一方法控制),只用一个实例和一个客户对象来维护所有"虚拟实例"的状态。

19、解释器模式:为语言创建解释器,将每一个语法规则表示成一个类,方便于实现语言。

20、中介者模式:集中相关对象之间复杂的沟通和控制方式。中介者内包含了整个系统的控制逻辑。每个对象都会在自己的状态改变时告诉中介者,每个对象都会对中介者所发出的请求作出回应。

21、备忘录模式:存储系统关键对象的重要状态,维护关键对象的封装。将被存储的状态放在外面,不和关键对象混在一起,帮助了维护内聚。

22、原型模式:允许通过复制现有的实例来创建新的实例,使客户的代码在不知道要实例化何种特定类的情况下,或当创建给定类的实例的过程很昂贵或很复杂时,可以制造出新的实例,即向客户隐藏制造新实例的复杂性。

23、访问者模式:打破了组合类的封装,允许对组合结构加入新的操作,而无需改变结构本身。


二、模式分类

分类法1:根据模式的目标可分成三类:创建型、行为型、结构性。

1、创建型模式

    涉及到将对象实例化,此类模式都提供一个方法,将客户从所需实例化的对象中解耦。

    涵盖模式:Factory Method、Abstract Factory、Singleton、Builder、Prototype。

2、行为型模式

    涉及到类和对象如何交互及分配职责。

    涵盖模式:Strategy、Observer、Template Method、Command、State、Iterator、Interpreter、Chain of Responsibility、Mediator、Memento、Visitor。

3、结构型

    涉及到把类或对象组合到更大的结构中。

    涵盖模式:Adapter、Facade、Decorator、Composite、Proxy、Flyweight、Bridge。

分类法2:根据模式所处理的是类或对象分类。

1、类模式

    类模式描述类之间的关系如何通过继承定义。类模式的关系是在编译时建立的。

    涵盖模式:Adapter、Template Method、Factory Method、Interpreter。

2、对象模式

    对象模式描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态、更有弹性。

    涵盖模式:Strategy、Observer、Facade、Decorator、Abstract Factory、Singleton、Builder、Prototype、Composite、Proxy、Flyweight、Bridge、Command、State、Iterator、Chain of Responsibility、Mediator、Memento、Visitor。


三、设计原则

1、封装变化

2、多用组合,少用继承

3、针对接口编程,不针对实现编程

4、为交互对象之间的松耦合设计而努力

5、类应该对扩展开放,对修改关闭

6、依赖抽象,不要依赖具体类

7、最少知识原则,减少对象之间的交互,不要让太多的类耦合在一起

8、不能让高层组件依赖低层组件,且两者都应依赖抽象

9、类应该只有一个改变的理由


四、复合模式

    将某些模式结合使用并不能称这些模式为复合模式,复合模式是在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题的一般性模式。MVC(Model-View-Controller)模式就是其中之一。

    MVC模式简介:

1、模型

    模型实现了观察者模式,当状态改变时,相关对象将持续更新。使用观察者模式,可以让模型完全独立于视图和控制器。同一个模型可以使用不同的视图,还可以同时使用多个视图。

2、视图

    视图实现了组合模式,每个显示组件不是组合节点就是叶节点。当控制器告诉视图更新时,只需告诉视图最顶层的组件即可,组合会处理其余的事情。

3、控制器

    视图和控制器实现了经典的策略模式:视图是一个对象,可以被调整使用不同的策略,而控制器提供了策略。视图只关心系统中可视的部分,对于任何外界的行为,都委托给控制器处理。使用策略模式也可以让视图与模型之间的关系解耦,因为控制器负责和模型交互来传递用户的请求,视图不知道工作是怎么完成的。

这篇关于Design Patterns Tips的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976160

相关文章

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

Axure元件库Ant Design中后台原型模板:提升设计与开发效率的利器

企业对于中后台产品的设计与开发需求日益增长。为了提升用户体验和开发效率,设计者和开发者们不断寻求更加高效、统一的解决方案。Ant Design,作为阿里巴巴开源的一套企业级UI设计语言和React组件库,凭借其丰富的组件和统一的设计风格,已成为众多项目的首选。而在Axure中使用Ant Design元件库,更是为中后台产品的原型设计带来了极大的便利。 Ant Design简介 Ant D

【UVA】11400-Lighting System Design(动态规划)

这道题感觉状态式不是很好推。。。 WA了好几次是因为排序的时候出问题了。 这道题出在线性结构里了,先说一下最长上升子序列吧。 dp[i]代表了以array[i]结尾的时候,最长子序列长度。 推导的时候,以起点递增的顺序进行推导。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#i

Circuit Design 贴片晶振的区分

贴片晶振脚位的区分(非常详细,尤其是如何区分四脚的有源无源晶振): http://ruitairt.com/Article/tiepian_1.html 如何区分有源和无源晶振: http://ruitairt.com/Article/yzjddbfqsq_1.html

Circuit Design RC 震荡电路

为了测试一个信号放大器,手边又没有合适的信号发生器,所以就需要自己手动来一个信号发生器。。。。。由于所需的频率大概也不会太高,手边也没有电感,所以选择用RC震荡电路来实现这个功能。 借鉴的网页: http://www.eepw.com.cn/article/283745.htm RC振荡电路,采用RC选频网络构成,适用于低频振荡,一般用于产生1Hz~1MHz(fo=1/2πRC)的低频信号。

Circuit Design 三极管驱动蜂鸣器电路 及 蜂鸣器两端电压正确但是不响的解决方案

利用三极管进行电流放大的蜂鸣器驱动电路图: (百度图片找的) 我用有源蜂鸣器实现的这个电路,但是蜂鸣器不响。 details: 1. VCC =5V 蜂鸣器两端的直接电压约为4.5V, 但是蜂鸣器不响。 2. 将蜂鸣器直接接在4.5V的电源两端,蜂鸣器响。(说明蜂鸣器是好的) 3. 测了三极管各个管脚的电压, 和理论上的是一致的。 情况很奇怪,换了好几个三极管结果都是一样的,

API安全 | 发现API的5个小tips

在安全测试目标时,最有趣的测试部分是它的 API。API 是动态的,它们比应用程序的其他部分更新得更频繁,并且负责许多后端繁重的工作。在现代应用程序中,我们通常会看到 REST API,但也会看到其他形式,例如 GraphQL 甚至 SOAP。 当我们第一次对某个目标进行安全测试时,我们需要做大量研究,以了解其主要功能以及它们在幕后如何工作。建议花一些时间来阅读有关目标及其服务的信息。例如,如果

ant-design-pro 学习01

1、开始学习ant-design-pro,安装啥的自动忽略,参考文档:https://pro.ant.design/docs/getting-started-cn 根据文档学习,添加页面,新增组件都没问题,可以跟着做,但是到了和服务器交互时就有点蒙了,因为ant-design-pro采用了dva框架实现,前段使用react技术,对于只有后台开发经验的我还停留在springmvc 的工作模式上,对

ant design pro 新增页面

1.在 src/routes/ 下面创建一个页面 // 填写如下内容/** NewPage.js内容 */import React, { Component } from 'react';export default class NewPage extends Component {render() {return (<div>这是新页面</div>)}}/** NewPage.le

ant mobile design组件库的PickerView组件不能滑动

问题 PickerView组件在开发环境可滑动,在测试环境不可滑动 正常开发环境是这样正常显示,并且可滑动的 发到测试环境后,变成了这样,并且只有中间那列可滑动,两边的都不能滑动,而且还会报警告 封装的组件代码如下 // 日期选择组件const CustomDatePickerView: FC<any> = ({customizeTab,setCustomizeTime,cus