面向对象设计与分析

抽象 abstract

舍弃个别非本质的特征。

过程抽象:一个功能分解为多个子功能,较高层次上思考问题

数据抽象:定义数据类型和限定的操作

对象 object

对象的数据称为属性,对象的操作称为服务或方法。

操作通过消息传递,可以为其它对象使用。

对外提供服务(public 公有的操作)。

属性 一般 只能通过执行对象的操作来改变。

类 class

对象客观事物分类:物理实体(飞机)、人或组织的角色(医生)、应该记忆的事件(飞行)、两个或多个对象的相互作用(购买)、需要说明的概念(政策)。

一组相似对象的定义,可以视为 模板,产生对象。

实例 Instance,属性 Attribute,方法 Method (通过该对象执行自己的方法改变,为其他对象服务)。

消息 Message (对象之间相互请求协作,执行其中某个操作的规格的说明),就是函数(或过程)调用,如 MyCircle.Show(GREEN)

OOP 三大特性

封装性 Encapsulation

对外隐藏,提供接口,无需知道细节。(通过 private protected 隐藏权限)。

继承性 Inheritance

子类自动地共享基类中定义的数据和方法的机制,不必重复定义。

能清晰体现类间的层次关系,提供可重用性,方便修改,方便建立和扩充新类。

多态性 Polymorphism

同一函数或运算符定义有多个不同的版本。(重载 Overloading,函数重载,运算符重载)

或不同层次中的每个类各自按自己的需要实现这个行为。

进一步减少了信息冗余,提高可重用性、可扩展性。

面向设计原则 SOLID+

单一职责原则

类的职责要单一,不能将太多的职责放在一个类中。

例子:登陆类中将登录表单和数据库逻辑抽离。

开闭原则

其功能对扩展是开放的,但对修改是关闭的。

例子:根据抽象类设计新类,通过配置文件反射获得实例。

里氏代换原则

可以接受基类对象的地方必然可以接受一个子类对象。

例子:不用对设置每一个对象都写一个方法,只用父类做为声明参数,传入子类参数实现符合定义。

接口隔离原则

使用多个专门的接口来取代一个统一的接口。

例子:抽象接口类再细分,细分的类再实现。

依赖倒转原则

针对抽象层编程,而不要针对具体类编程。

依赖注入,构造注入(constructor),设值注入(setter),接口注入(Interface)(注入依赖度逐渐减少)。

例子:就是对具体类构造抽象类。

合成复用原则

尽量多使用组合和聚合(聚合类不能单独存在)关联关系,尽量少使用甚至不使用继承关系。

继承复用是静态的,不可能在运行时发生改变,灵活性低。(实际上主要看具体使用环境,要复用代码的时候还要继承)

例子:当继承使用不恰当,想要使用被继承类的方法可以有多个实现,改为组合或聚合对象注入。

迪米特法则

软件实体对其他实体的引用越少越好,或两个类不必彼此直接通信。

不会和远距离对象有直接的关联,模块间大的通讯效率降低,但对信息隐藏的控制可以促进系统模块不过于依赖其他模块存在,每个模块可以独立使用。(系统规模大的时候适合改造)

例子:通过增加 Controller 操作控制流,代码层面上 Form、Dao 在各自类上不用知道对方,减少依赖度。

建模、分析、设计和实现

**模型 ** 由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。

统一建模语言 UML:为建立系统模型提供了一个图形化的表示手段。

用例图

在这里插入图片描述

时序图

在这里插入图片描述

img 异步消息可以不用返回或稍后返回,还有自关联关系(回环)。

活动图

在这里插入图片描述

类图

在这里插入图片描述
泛化:类与类之间的继承关系,接口与接口之间的继承,类对接口的实现关系。

继承,空心箭头+实线,箭头指向父类;接口,空心箭头+虚线

关联:类与类之间的连接,一个类知道另一个类的属性和方法。

实线+箭头,可以标识数量可以有0个或更多个对象,一对一,一对多关系。

聚合: 关联关系的一种,是整体和个体的关系,处于不同的 层次,一个是整体,一个是部分。

空心菱形+实线+箭头

合成:比聚合关系强的关联关系,部分不能单独存在,存在于整体的生命周期中。

实心菱形+实线+箭头

依赖:一个类依赖于另一个类的定义,体现为局部变量,方法的参数、或静态方法的调用。

对象图

在这里插入图片描述

设计模式

创建型模式:主要用于创建对象,实例化过程进行了抽象,对象的创建和对象的使用分离,职责更清晰。

结构型模式:处理类或对象的组合,类结构型模式关心类的组合(继承和实现关系),对象结构性模式关心类和对象的组合(通过关联关系调用方法,来替代继承关系)

行为型模式:描述对象怎么交互和分配职责,关注它们之间的相互作用。

类模式:关系通过继承建立,编译 时确定(包括配置过程确定),通过继承。

对象模式:关系通过关联建立,运行 时变化(运行时经常交互改变),更具动态性。

范围 \ 目的 创建型模式 结构型模式 行为型模式
类模式 工厂方法模式 (类)适配器模式 解释器模式、模板方法模式
对象模式 抽象工厂模式、建造者模式、原型模式、单例模式 (对象)适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式 职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式

简单工厂模式 Simple Factory

产品来自同一个基类,一个工厂方法使用一个方法通过参数分支返回具体类。

工厂职责可能过重,适用于工厂类负责创建的对象类少,只需传参构建 不需知道创建细节 的情况。

简单工厂简化版,没有工厂类,产品基类 负责创建产品。

例子:支付功能,每个支付分支构建过程复杂,抽象构建过程为类。工厂返回支付类后可调用支付方法。

工厂方法模式 Factory Method

简单工厂模式:但有新产品加入到系统中时,必须修改工厂类,违反 “开闭原则”。

具体生产过程交给工厂子类来完成,那么就不用通过修改工厂类,工厂基类定义公共接口,通过增加具体工厂类来引进新的产品。

添加新的具体产品类时必须提供具体工厂类,编写开销增大,适用于创建对象的任务委托给某一个工厂子类的情况。

例子:具体工厂负责创建产品,过程过程可定制;日志功能类的生成。

抽象工厂模式 Abstract Factory

工厂方法模式:仅仅生产同一类产品。

需要工厂能够提供产品族(同一个工厂生产多个产品对象,位于不同产品等级结构(非同一产品基类))的情况下。

可以实现高内聚低耦合,但是添加新的产品等级结构时,需要对所有工厂角色进行扩展。

例子:电气工厂;数据库操作系统(生产 Connection 对象和 Statement 对象两个产品等级结构)

建造者模式 Builder

创建对象存在多个部件,部件生成过程和其组装过程分开,一步一步创建 一个复杂的对象。对于外部使用,同样只需传参。

Builder 创建者类 包括每个组件的生成过程,引入 Director 指挥者类 指挥 组装步骤

Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
// director.construct() 中调用 builder.buildA(), builder.buildB()...
Product product = director.construct();

可以更加 精细地控制 产品的创建过程,关键是针对抽象建造者类编程。

适合产品对象有 复杂的内部结构 的情况,内部对象生成需要 顺序 ,创建过程 独立 于创建该对象(使用指挥者)的情况。

例子:KFC 根据顾客要求套餐一步步组装套餐返回。

原型模式 Prototype

适用已存在一个对象,需要克隆出多个基于原型对象的对象的情况,减少频繁创建的过程。

原型类需要实现 clone 方法接口。

深克隆,对于每个引用对象重新创建。浅克隆,对于每个引用对象直接引用。

例子:相似对象复制改属性,比如游戏中同一类怪物的有不同属性,且需快速创建。

单例模式 Singleton

适用系统中仅允许存在一个实例的情况。

让类 自身负责 保存它的唯一实例:类自行创建,自行提供。

private static Singleton instance = null; // 也可以类加载时就实例化
private Singleton()
{
   	
}
public static Singleton getInstance()
{
   
	if(instance == null)
		instance = new Singleton();	
	return instance;
}

单例类没有抽象,扩展麻烦,对象负担过重(例如连接池溢出),回收语言存在可能性销毁对象,导致状态丢失。

例子:数据库主键生成器。

适配器模式 Adapter

软件开发时可以通过目标类的接口访问它所提供的服务。

对于不兼容接口的对象,定义包装类 **适配器 Adapter **,所包装的对象是 适配者 Adaptee,可以使由于接口不兼容而不能交互的类可以一起工作。

public class Adapter extends Adaptee implements Target // 类结构模式
{
   
    // Adaptee 也可作为对象成员(对象结构型模式)
	public void request()
	{
   
        // 可添加兼容操作
		
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值