Gof设计模式中,对设计模式的主要分类为:
1)创建型、2)结构型、3)行为型。
创建型设计模式抽象了对象的实例化过程;(创建与实例化解耦)
结构型设计模式涉及到如何组合类和对象以获得更大的结构
行为型设计模式描述如何控制执行的流转以及对象间如何交互
1: 简单工厂和策略模式: 简单的多态应用(Model+Factory)
2:装饰模式:通过父类将子类串在一起。客户端向父类传入子类对象,调用其方法
3:工厂方法:把对象的创建封装到工厂的方法,减少了与客户端的耦合
4: 原形模式:浅复制:直接实现clonable接口, 深复制:先复制对象,再执行浅复制
5: 模板模式:把共有的东西都抽象的父类,子类通过继续方法来达到不同的实现
6:外观模式:如果每个 子系统 需要统一做一件事的时候,可以通过抽象出一个公用操作接口统一操作
7:建造者模式:将对象的创建和生产分离开
8:观察者模式跟回调:不同对象有不同实现,可以通过抽象出接口或者抽象类,在实例化的时候编写自己的逻辑。
9: 抽象工厂模式和反射:还是依赖于抽象接口。而反射,简单的来说是 根据字符串来动态生成对象
10:状态模式:消除switch和if的,主要根据传入的对象的属性来判断应该生成哪些方法(不太懂)
总结:
1: 类的职责单一,只要完成好自己的事;
2: 两者的联系依赖于抽象,不依赖具体
3: 抽象,封装,继承,多态
抽象类和接口的差别:
抽象类用于部分实现一个类,再由用户按需求对其进行不同的扩展和完善;接口只是定义一个行为的规范或规定。
抽象类在组件的所有实现间提供通用的已实现功能;接口创建在大范围全异对象间使用的功能。
抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
抽象类主要用于设计大的功能单元;而接口用于设计小而简练的功能块。
例如:
Window窗体可以用抽象类来设计,可以把公有操作和属性放到一个抽象类里,让窗体和对话框继承自这个抽象类,再根据自己的需求进行扩展和完善。
打印操作可以作为一个接口提供给每个需要此功能的窗体,因为窗体的内容不同,就要根据他们自己的要求去实现自己的打印功能。打印时只通过接口来调用,
而不用在乎是那个窗体要打印。
软件设计的一些原则:
软件的核心是 模型,不是技术,也不是模式
软件设计的关键是建立能够表达丰富功能需求的领域模型
设计的原则:封装变化,让变化跟不变的部分 分开
OOP原则:优先实用组合而不是继承;强调面向接口和抽象编程,隐藏了具体实现,减少了耦合
单一原则:封装,一个类只要负责好他自己的事情就可以了
开放-封闭原则:(可扩展性)对扩展开放,对修改封闭
依赖倒转原则:依赖抽象或者接口,不依赖具体的类
迪米特原则:尽量只跟相关的类做交互(强调类的松耦合)
Pareto原则: 20%工作需要80%的精力(强调避免过度开发)
依赖注入(基于抽象耦合的注入):
(1)构造注入
(2)setter注入
(3)接口注入
面向对象和面向过程思想本质的区别(自悟):
看写程序的代码: 如果看上去是第三者的角度,便是面向对象; 如果是第一者的角度,便是面向过程。对问题的思考的方式也能说明此问题.