菜鸟看设计模式系列笔记之开篇:设计模式的原则及概论

模式是在某一个背景下的某一个问题的解决方案。

设计模式在很大程度上是为了解决软件的可复用性,而根据大量工程实践总结出来的软件体系结构,隐含包括了软件工程的面向对象思想:封装、继承、多态。

为什么需要设计模式:设计模式(Design Pattern )是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,

使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性。

设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关的设计模式,关键因素包括以下四个方面:

(1)模式名称(Pattern name) (2)问题(Problem) (3)解决方案(Solution) (4)效果(Consequences)

面向对象方法中把一切都看成对象。对象是功能抽象和数据抽象的统一,对求解问题本身建模

面向对象的常用名词: 面向对象分析OOA、面向对象设计OOD 、面向对象编程OOP、面向对象编程 OOP、面向对象测试OOT

面向对象的基本原则:(1)抽象Abstraction(2)封装Encapsulation(3)模块Modularity(4)层次化Hierarchy

面向对象的几个基本概念: 对象Object、类Class 、接口Interface、多态Polymorphism 、继承Inheritance、类(及对象)之间的关系

类(及对象)之间的关系:

(1)静态联系————关联association

关联是类与类之间的连接,使一个类知道另一个类的属性和方法。是类与类之间最常用的一类关系,它是一种结构化关系,用于表示一类对象和另一类对象之间有联系。

在UML类图中,用实线连接有关联对象所对应的类,在使用Java、C#和C++等编程语言表示关联关系时,通常将一个类的对象作为另一个类的属性。

包括三种关联关系:双向关联、单向关联、自关联

双向关联类图:

单向关联类图:

自关联类图:

(2)构成关系————聚合aggregation(整体-部分)

聚合关系是关联关系的一种,是强的关联关系,是整体和个体之间的关系。表示一个整体与部分的关系。

该整体类与成员类之间形成聚合关系,成员类是整体类的一部分。

如果不能确定一个关系是聚合关系,可以将它们设为关联关系。

在UML中聚合关系用带空心菱形的直线表示。

组合关系是关联关系中的一种,比聚合关系强,如果不能确定一个关系是不是组合关系,可将其设置为聚合关系,甚至关联关系。

也表示类之间整体与部分的关系,但是组合关系中的部分和整体具有相同的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死的关系。

在UML中组合关系用带实心菱形的直线表示。

分类关系————泛化generalization(一般-特殊)

泛化关系(Generalization)也就是继承关系,泛化关系用于描述父类和子类之间的关系,父类又称作基类或超类,子类又称作派生类。

在UML中泛化关系用带空心的三角形的直线来表示

JAVA语言中使用extends关键字、在C++/C#使用冒号“:”来实现。

接口与实现关系,接口之间也可以有与类之间关系类似的继承关系与依赖关系,但是接口与类之间还存在一种实现关系(Realization),在这种关系中,类实现了借口,类中的操作实现了接口中所申明的操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。

使用关系————依赖Dependency(行为依赖)

依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时的使用依赖关系。

大多数情况,依赖关系体现在某个类的方法使用另一个类的对象作为参数。

在UML中,依赖关系用带箭头的虚线表示

一个好的软件系统需要包含三个特性:扩展性(Extensibility)、灵活性(Flexibility)、可插入性(Pluggability)

软件设计的七大原则:

(1)单一职责原则(SRP)

就一个类而言,应该只有一个导致其变化的原因。

类的职责主要包括两个方面的:数据职责和行为职责,数据职责通过其属性来体现,而行为职责通过其方法来表现。

单一职责原则 是实现高内聚、低耦合的指导方针。

对应的设计模式:Facade 、Proxy

(2)开-闭原则(OCP)

设计一个模块时,应当使该模块在不被修改的前提下被扩展,即可在不必修改源代码的情况下改变该模块的的行为。

抽象化是开闭原则的关键,开闭原则还可以通过一个更加具体的“对可变性封装原则”来描述,对可变性封装原则要求找到系统的可变因素将其封装起来。

一种可变性不应该散落在代码的很多角落里,而应该被封装在一个对象里。(继承可被看作封装变化的方法)

一种可变性补英语另一种可变性混在一起。(继承的层次不应太多了)

对应的设计模式:Strategy 、Simple Factory 、Factory Method、Abstract Factory、Builder、Bridge、Facade、Mediator、

(3)Liskov替换原则(LSP)

一个软件实体如果使用的是一个基类的话,一定适用与其子类,而且根本不能察觉出基类对象和子类对象的去区别

即:子类型(Subtype)必须能够替换他们的基类型(Basetype).

在软件设计中如果能够使用基类对象,那么一定能够使用其子类对象。

在程序中尽量使用基类类型来对对象进行定义,而在运行时在确定其子类类型,用子类对象来替换父类对象。

如果有一个由继承关系形成的等级结构的话,那么在等级结构的树图上面的所有树叶节点都应该是具体类,

而所有的树枝节点都应该是抽象类或接口。

对应的设计模式:Strategy 、Composite、Proxy

(4)

GOF的设计模式主要包括:二十三种设计模式总结

时间: 2024-10-10 04:49:52

菜鸟看设计模式系列笔记之开篇:设计模式的原则及概论的相关文章

菜鸟学设计模式系列笔记之Prototype模式(原型模式)

菜鸟学设计模式系列笔记之Prototype模式: Intent: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 Motivation:以一个已有的对象作为原型,通过它来创建新的对象. 在增加新的对象的时候,新对象的细节创建工作由自己来负责,从而使新对象的创建过程与框架隔离开来. 应用场景: (1)当一个系统应该独立于它的产品创建.构成和表示时 (2)当要实例化的类是在运行时刻指定时,例如动态加载 (3)为了避免创建一个产品类层次平行的工厂类层次时 (4)当一个类的实例只能有几个

菜鸟学设计模式系列笔记之创建型模式简介

设计模式是"封装变化"方法的最佳阐释 无论是创建型模式.结构型模式.还是行为型模式,归根结底都是寻找软件中可能存在的"变化",然后利用抽象的方式对这些变化进行封装. 由于抽象没有具体的实现,就代表了一种无限可能性,使得其扩展成为了可能. 经典设计模式都是在寻找软件中的可能变化,并封装这些变化. 封装通常的理解:将数据(属性)和对数据的操作(方法)放到一个程序单元(类)中,从而使得概念上相关的数据和操作在编程语言上相关:正确的理解:信息隐藏--隐藏细节,对对象内部细节

菜鸟学设计模式系列笔记之建造者模式(Builder模式)

提供一种"封装机制"来隔离出"复杂对象的各个部分"的变化. 从而保持系统中的"稳定构建算法"不随需求变化而变化.----建造者模式 建造模式是对象的创建模式 建造模式可以将一个产品的内部表象与产品的生成过程分割开来, 从而可以是一个建造过程生成具有不同的内部表象的产品对象. Intent : 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 Motivation: 在复杂对象的构造过程中,允许同样的构造过程能够加入新的被

菜鸟学设计模式系列笔记之抽象工厂模式

抽象工厂模式(Abstract Factory模式): (1)Intent:提供一个创建一系列相关后相互依赖对象的接口,而无需指定它们具体的类-客户端不必指定产品的具体类型,创建多个产品族中的产品对象 (2)Motivation :为保证视感风格标准间的可移植性,应用不应该为一个特定的视感外观硬编码它的窗口组件.在整个应用中实例化特定的视感风格的窗口组建类将使得使得以后很难改变视感的风格. 抽闲工厂模式面对的是多个产品等级结构的系统设计. 工厂方法模式针对的是一个产品等级结构: 抽象工厂模式需要

菜鸟学设计模式系列笔记之单例设计模式(Singleton模式)

特殊的类: (1)类和它的实例间一般是一对多的关系.对大多数的类而言,都可以创建多个实例. 在需要这些实例时创建它们,在这些实例不再有用时删除它们.这些实例的来去伴随着内存的分配和归还. (2)但是有一些类,应该只有一个实例. 这个实例似乎应该在程序启动时被创建出来,且只有在程序结束时才被删除. Intent : 一个类仅有一个实例,自行实例化并向整个系统提供一个访问它的全局访问点 Motivation : 对于一些类来说,只有一个实例是很重要的 Singleton (1)定义一个Instanc

菜鸟学设计模式系列笔记之工厂方法模式

工厂方法模式(Factory Method): Alias :virtual constructory 虚构造器 Intent: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. Motivation:一个框架使用抽象类定义和管理对象之间的关系.这个框架负责去创建这些对象. 工厂方法模式是类的创建模式,又叫做虚拟构造子模式(Virtual Constructor)或者多态性(Polymorphic Factory)工厂模式 工厂方法

菜鸟学设计模式系列笔记之适配器模式(adapter模式)

一.结构模式简介: 在面向对象软件系统中,每个类都承担了一定的职责,它们可以相互协作,实现一些复杂的功能 结构型模式关注的是如何将现有类或对象组织在一起形成更加强大的结构 不同的结构型模式从不同的角度来组合类和对象 1.结构模式描述如何将类或者对象结合在一起形成更大的结构 (1)类的结构模式:类的结构模式使用继承把类.接口等组合在一起,以形成更大的结构.当一个类从父类继承并实现某接口时,这个新的类就把父类的结构和接口的结构组合起来.类的结构模式是静态的. (2)对象的结构模式:对象的结构模式描述

学C#之设计模式系列笔记(2)观察者模式

一.借鉴说明 1.<Head First Design Patterns>(中文名<深入浅出设计模式>) 2.维基百科,观察者模式,https://zh.wikipedia.org/wiki/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F 3.MSDN,event(C#参考),https://msdn.microsoft.com/zh-cn/library/8627sbea.aspx 二.观察者模式 基础知识 提供一个被观察者(数据库.通

设计模式学习笔记——单例设计模式

1.特点:只需一个实例时考虑. 2.概念:保证一个类仅有一个实例,并提供一个供访问的全局点. 3.类图: 4程序实现: 1)懒汉式:对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备.它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回.懒汉模式只在外部对象第一次请求实例的时候才去创建.懒汉模式,它的特点是运行时获得对象的速度比较慢,但加载类的时候比较快.它在整个应用的生命周期只有一部分时