前言
1.设计模式介绍
设计模式是面向对象设计原则的实际运用,是对类的封装、继承、多态以及类的关联和组合的充分理解,前辈们对代码开发经验的总结,解决特定问题的一些列套路。它不是语法规定而是一套用来提高代码可复用性、可读性、可维护性、稳健性以及安全性的解决方案。
设计模式是一种思想,灵活运用思想远大于死记代码,咬文爵字
。
2.正确使用设计模式具有以下优点:
- 可以提高程序员的思维能力、编程能力和设计能力。
- 是程序设计更加标准化、代码编制更加工程化,是软件开发效率大大提高,从而缩短软件的开发周期。
- 使设计的代码可复用性高、可读性强、可靠性高、灵活性好、可维护性强。
3.设计模式的基石:封装、继承、多态;
1.封装
- 把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
- 在Java中类中成员的属性有:public, protected, (default), private 这四个属性的访问权限依次降低。
2.继承
-
继承是面向对象最显著的一个特性,是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
-
提高代码的复用性。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
-
Java只支持单继承,不支持多继承。也就是一个类只能有一个父类,不可以有多个父类。
3.多态
对象在不同时刻表现出来的不同状态。
重写与重载
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
重写注意事项:
- 参数列表必须完全和被重写方法的参数列表一致。
- 返回类型必须完全和被重写方法的返回类型一致。
- 访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)。
- 重写的方法一定不能抛出新的检查异常或者比被重写方法声明更加宽泛的检测型异常。
重载的注意事项:
- 在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)。
- 各个重载方法的参数列表必须不同。
- 各个重载方法的返回值类型可以相同也可以不同,但是仅仅返回值类型不同的不是重载。
- 不能通过仅仅通过访问权限、返回类型、抛出的异常的不同而进行重载。
一、设计模式总览
1.1 创建型模式
单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。
创建型模式关注点:
怎么创建出对象?
将对象的创建与使用分离
降低系统的耦合度
使用者无需关注对象的创建细节
1.2 结构型模式
适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式、过滤器模式。
1.3 行为型模式
模板方法模式、命令模式、迭代器模式、观察者模式、中介模式、备忘录模式、解释器模式、状态模式、策略模式、职责模式、访问者模式。
二、OOP七大原则
- 开闭原则: 软件实体应该对扩展开放,对修改关闭。也就是在扩展功能时,不能去修改原有的代码,而是在原有的代码基础上进行功能扩展。
扩展新类而不是修改旧类
。 - 里氏替换原则: 继承必须确保超类所拥有的性质在子类中任然成立。尽量添加新的方法来实现新的功能,不要重写父类的方法来实现功能,否则程序的可复用性就会变差,在多态的场景下程序也会出现错误。
继承父类而不去改变父类
。 - 依赖倒置原则: 高层模块不应该依赖底层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象,这样就降低了程序的耦合度。
面向接口编程而不是面向实现编程
。 - 单一职责原则: 控制类的粒度的大小、将对象解耦、提高其内聚性。即一个方法、语句、表达式应该单一的做一件事情,不要用一个方法来实现多个功能。
每个类只管负责自己的事情而不是变成万能
。 - 接口隔离原则: 要为各个类建立它们需要的专用接口。一个类对应一个接口,不要用多个类实现同一个接口。类似单一实现。
个各类建立自己的专用接口而不是万能接口
。 - 迪米特法则: 最少知识原则,只与你的直接朋友交谈,不跟陌生人说话。保证A-B-C链式调用,不要A直接与C通信。缺点就是B有点冗余,但重点还是要保证系统结构清晰。
无需要直接交互的两个类,如果需要交互,使用中间者
。 - 合成复用原则: 尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。也就是尽量先考虑将对象B作为对象A的属性来使用,其次才是考虑继承(开闭原则的实现)。
优先使用对象组合而不是继承
。