相信如今从事软件行业的人都相当熟悉(或者至少听说过)设计模式的概念,无论是在软件开发环境还是在别的环境中。自己之前也读过《大话设计模式》以及零散的一些设计模式,但什么是反模式呢?
————————设计模式 VS 反模式——————————
设计模式可以帮助你识别和实现有益的过程、设计和代码,而反模式的作用与模式正好相反,它们让你留意软件开发过程中潜在的各种陷阱与危险,这些东西都可能会导致项目的毁灭。反模式阐明了那些导致开发障碍的负面模式,并包含了经过验证可以把软件开发问题转变成机会的解决方案。
设计模式的基本要素就是问题及其解决方案,模式中通常会详细阐述问题的上下文环境和影响到该问题解决方案设计的作用力。反模式的核心是两个解决方案,而不是普通设计模式中的一个问题和一个解决方案,第一个解决方案是存在的问题,第二个则是重构方案。
—————————相关扩展——————————————
面向对象架构的一个关键方面就是适当的划分,划分决策出现在稳定的可复用设计和可天幻设计之间。稳定的设计在系统的整个生命周期内都会一直存在于系统中,而系统中个别的软件模块则可能会被修改、替换或增加。最好把可替换的设计细节放置到配置文件和元数据中。理想情况下,系统层次的接口在活跃的软件开发过程中是保持稳定的,很少会被改变。稳定的接口可以运行并行开发、有效地编写文档,并减少软件被废弃的可能性。
如果某个对象的接口是独特的,没有其他的实现来支持同一个接口,那么这个接口就是依赖于实现的。在使用第三方供应商提供的接口时,应当通过适当的分层和封装来隔离。
关于设计选择: 可以通过隔离各种关注点、建立优先级等方式来澄清设计选择,也就是说,把问题划分成多个可解决的元素而不是同时处理所有问题。
————————软件设计层次模型————————————
如果试图在没有总体架构的情况下以零碎部分为基础来开发一个系统,那么随着系统由于需求变化和采用新技术而发展,它会逐渐难以管理。如一个参考的软件设计层次模型:
对象和类—>微架构—>框架—>应用层—>系统层—>企业层—>全球行业层
分享到:
相关推荐
### 韩顺平_Java设计模式笔记知识点详解 #### 1. Java设计模式内容介绍 ##### 1.1.1 先看几个经典的面试题 - **原型设计模式问题** - **UML类图**:原型模式的核心在于定义了一个`Prototype`接口,该接口声明了...
在Java中,可以通过重写`clone()`方法实现深拷贝,或者利用序列化和反序列化进行深拷贝。Spring框架中,`prototype`作用域的bean创建就是原型模式的应用,例如`...
1. 工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法把实例化操作推迟到子类。 2. 抽象工厂模式:提供一个接口用于创建相关或依赖对象的家族,而不需要明确指定具体类。 3. ...
软件体系结构与设计模式笔记样本 软件体系结构是指软件系统的组织方式和结构,它是软件设计的核心概念。软件体系结构涉及构件、连接件和约束三个要素,构件是可预制和可重用软件部件,是构成体系构造基本计算单元或...
1. **代理模式**: 代理模式提供一个代理对象来控制对原对象的访问。代理对象与目标对象具有相同的接口,可以增加额外的功能,如权限控制、缓存、日志记录等,而不会影响到原有对象的使用。代理模式分为静态代理和...
笔记中列出了饿汉式、懒汉式、双重检测锁式、静态内部类和枚举类实现单例的方法,并探讨了防止反射和反序列化破解单例的方法。 2. 工厂模式(Factory Pattern):包括简单工厂模式、工厂方法模式和抽象工厂模式,...
第五组的差值与排除是反值,是相片的负片,使用时一般用黑白色做前背景色,差值的程度比排除大;第六组是基于人眼的,HSB。 背后模式 背后模式是画笔工具的一种模式,将画的颜色都在图层像素后面,即使用后要看到...
在VMP(Virtual Machine Protect,虚拟机保护)的学习笔记中,这个过程主要涉及到两个关键结构体:struct_VmFunctionAddr(特殊Opcode)和struct_DisassemblyFunction(基础Opcode)。 【Vmp_AllDisassembly函数】...
1. 艾略特波浪理论是由拉尔夫·纳尔逊·艾略特提出的,旨在解释股票市场指数的可识别模式趋势和反转。 2. 五浪模式是市场行为的关键模式之一,它由三个真正影响有向运动的浪和两个逆势休整期组成。 3. 波浪进展方式...
单例模式是软件设计模式中的一种,它的...在实际开发中,选择哪种单例模式取决于具体需求,例如对性能的要求、是否需要延迟初始化以及是否考虑反序列化安全。了解并熟练掌握这些单例模式有助于编写高效、可靠的代码。
这款应用利用了Android平台上的先进技术和最佳实践,如RxAndroid、MVP(Model-View-Presenter)架构模式以及Dagger2依赖注入框架,旨在提供一个高效、直观且易于使用的笔记记录体验。 1. **Material Design**: ...
狂神说笔记将涵盖JSON的序列化与反序列化,并讲解与Java对象之间的转换。 9. **Tomcat服务器**:作为JavaWeb的常用应用服务器,Tomcat的安装、配置、部署以及优化技巧也是学习的重要部分。 10. **安全机制**:包括...
1. **Java语言基础**:包括Java的历史、特点、安装配置,以及基础语法如变量、数据类型、运算符、流程控制语句(if-else、switch、for、while等)。 2. **类与对象**:讲解面向对象编程的基本原理,如类的定义、...
本文档是小小明个人笔记,涵盖了正则表达式的各个方面,包括各种模式、分组、断言、匹配、查找、替换和切割等。文档中提供了详细的正则匹配规则表,涵盖了基本字符规则、预定义字符集、常用字符集、数量词、边界匹配...
1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过抽象工厂接口,避免了客户端与具体产品类之间的耦合。在实际应用中,例如,数据库连接的创建,我们可以使用工厂模式来创建...
- 无监督学习:寻找数据集中的内在结构或模式,如聚类。 2. **线性回归** - 模型表示:用直线拟合数据点,找到最佳拟合线。 - 最小二乘法:通过最小化预测值与实际值之间的平方误差来优化参数。 - 正则化:防止...
斯坦福大学2014年的机器学习课程是机器学习领域里极具影响力的课程之一,本课程内容广泛覆盖了机器学习、数据挖掘、统计模式识别等相关主题。以下是对该课程的个人笔记中涉及知识点的详细解读。 机器学习是人工智能...
本课程还将使用大量的案例研究,您还将学习如何运用学习算法构建智能机器人(感知,控制),文本的理解(Web搜索,反垃圾邮件),计算机视觉,医疗信息,音频,数据挖掘,和其他领域。 机器学习的主要应用包括自动...
通过对学习算法的理解,可以实现复杂的系统和应用,比如智能机器人感知环境并作出决策、实现网络搜索和反垃圾邮件系统、改进医疗诊断等。 课程的讲授者是吴恩达(Andrew Ng),他是著名的机器学习和人工智能专家。...
10. **设计模式**:单例模式、工厂模式、观察者模式等设计模式是面试中常考的内容,它们是解决特定问题的成熟方案。 11. **JVM**:理解Java虚拟机的工作原理,如类加载机制、内存模型(堆、栈、方法区等)、垃圾...