简单工厂模式
不管什么设计模式,都基本遵循以下几个数据原则:
- 依赖倒置原则:高层模块不依赖低层,反之可以;二者均依赖于抽象。抽象不依赖实现,反之可以。
- 开放封闭原则(OCP~ open close principle):对扩展开放,对更改封闭。类模块可扩展,不可修改
- 单一职责原则(SRP):
- 替换原则:子类应能替换掉他们的基类(IS-A)。
- 接口隔离原则:接口尽可能小但功能要完备。
- 优先使用对象组合功能实现,而不是类继承。
- 针对接口编程,而不是实现。
- 封装变化点:使用封装创建对象的分界。
面向对象
-
特性: 可维护 可复用 可扩展 程序灵活
-
面向对象优点: 通过封装、继承、多态进行解耦,从而获得以上特性。
-
紧耦合、松耦合:
简单工厂模式(注意表示关系的符号)
-
使用一个单独类来创造实例化的过程,就是简单工厂模式。
-
-
UML图: 第一行是接口的名称,如果是抽象类,就用斜体表示。
第二行是类特性,一般为字段类和属性。
第三行是类的操作,一般为方法和行为。
继承关系用空心三角+实线。 -
“关联”关系:
企鹅和南极有关联关系,可用关联符号表示(实线箭头)。 -
聚合关系:
聚合关系(aggregation):一种弱归属关系,体现A可以包含B,但B不一定属于A的一部分。常用空心菱形+实线。 -
合成关系(composition):一种强‘拥有’关系,体现了严格的部分和整体,如部分和整体耳钉生命周期。
-
-
依赖关系(dependency):
策略模式
-
面向对象的编程,并非一味使用类。类是为了封装,但分类的基础是抽象,具有相同属性和功能的对象集合才是类。
-
策略模式: 分别封装算法,使其可以相互之间互相替换,不会影响到使用算法的客户。
-
-
策略模式的实现:
-
策略模式解析:
策略模式是一种定义一系列算法的方法,从概念上看,所有的算法都完成相同的工作,比如对某一打折功能的具体费率,不过实现不同,调用也相同。这么做减少了实现之间的耦合性。
策略模式中的strategy类层次为context定义了一系列可重用方法、行为,继承有助于析取这些公共功能(DP)。
策略模式简化了单元测试,没个算法都有自己类,可以对接口单独测试。(DPE)
单一职责原则
单一职责原则:功能要“单一”。对一个类而言,应该仅有一个引起他变化的原因(ASD)。
一个类中如果功能太多,相当于加耦合。
设计方块游戏
- 软件设计的内容,就是找到职责(任务)并相互分离。
判断是否应该分离: 如果有不止一个的动机改变一个类,那他就具有多个职责(ASD),应考虑分离。
开放-封闭原则
- 即软件实体(类、模块、函数)等应该支持扩展,但不能修改(ASD)。
对扩展是开放的,对更改是封闭的。------多扩展,少修改
对于无法或者不可能完全封闭的变化,设计人员需对模块应该对变化封闭做出选择-----猜出最可能发生变化的类,然后构造抽象类进行隔离。
依赖倒置原则
- 针对接口编程,而不是针对实现编程。
里氏代换原则
- 一个软件实体如果使用的是一个父类的情况下,那也适用于其子类。而且它察觉不出父类对象和子类对象的变化。即**“父类替换成子类,软件的行为没有变化。”**
装饰模式(Decorator)
- 动态的给一个对象添加一些额外的职责,从增加功能来讲,装饰模式比生成子类更灵活。
- 装饰模式总结:将功能动态的添加更多功能的一种方式。
- 系统需要新功能时,即向旧的类中添加新代码,这些新代码相当于装饰原有类的核心职责和主要行为。
代理模式
- 定义:为其他对象提供一种代理以控制对这个对象的访问。
代理模式应用
应用场合
- 远程代理:为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
- 虚拟代理: 根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象DP。
- 安全代理: 用来控制真实对象访问时的权限DP。