原则:
面向对象编程,培养面向对象思想。DDD,设计模式是面向对象的左右手。
对象是人类的正常思维方式,它是表示具体东西或抽象的事物,它有单一的职责和统一的行为。(比如想到一个长方形的周长或面积,不能应当就想到对应的周长或面积,而是应当先想到长方形对应的是一个对象,它有对应的属性,长和宽,然后有对应的行为周长或面积还可以对应的相应的增长)
“优先使用对象组合,而不是继承”。
ISP接口分离原则。比如比如会报警的门AlarmDoor不能只实现一个有open,close,alarm三个行为的接口,根据ISP原则不能把它们门各报警的接口混为一堂,不能让Alarm模块的变化引起了Door这个不同行为模块的变化,因此要把它们分离。分成二个不同的接口一个是Door接口, 一个是Alarm接口。
继承表示的是(is-a)关系,接口实现表示的是拥有(like-a)的关系。比如会报警的门AlarmDoor因为它本质上是门,拥有报警的功能,所以就应当这么实现class AlarmDoor extends Door implements Alam;是一个(is-a)用继承表示;有一个(has-a)用组合表示。
“对扩展开放,对修改关闭”开-闭原则。
SOLID:面向对象设计的五项原则 (是SRP单一职责原则、OCP开闭原则、LSP李式代换原则、ISP依赖反转原则和 DIP接口分离原则,首字符的缩写)
设计模式:
二个阶段的学习
1.熟记多少种的设计模式,格式规范,最普通,最经典的用法。
2.什么场合用,这是关键。
以下是为什么用此模式的解释:
一、state状态模式
状态不同引起的行为的不一致。状态模式中, 一个状态对应一个状态子类, 每个状态子类实现父类提供的行为, 外界在创建状态引用类的同时,在引用类内部根据初始的参数值创建 对应的状态类,状态引用类和状态类本身是一体的,是强耦合关系,状态类的创建和初始化由状态引用类来管理是完全合理的,所在外部调用时只是调用一状态引用类的接口,它不关心状态引用类的内部实现,不去关心状态类的创建和切换。
二、strategy策略模式
选择不同的算法但引起的结局一样。
策略模式里,是为了实现某个行为而采取的不同策略,采取何种何种策略由外部条件决定。
与状态模式区别:状态模式是随着状态的变化,做同样的行为,但结果是不一样的(如:银行不同级别信用卡用户,可以透支的金额是不一致的);策略模式是指做同样的行为,产生同样的结果,但选择的策略、实现方式是不一致的(如用不同的方式上传图片,用不同的算法压缩文件,用不同的图形方式展示相同的数据变化)。其实它们本来就是不一样的运用场景,本没有什么可比性。
三、Builder模式
Builder模式用于创建复杂对象。创建方式和组件创建的分离。(比如车子的组装,包括方向盘,轮子,发动机)
五、适配器模式adapter
先有二个相似的接口,为了把二个接口整理成同一个接口,而需要用到适配器模式。
六、brigde模式
有二个(或多个)变化角色的不同组合实现M*N个对象,为了不用M*N个子类而是通过为M+N个类动态组合来实现,需要用到桥模式。
七、proxy模式
只对原有接口进行了少许的改变和控制。这时需要用到proxy模式(经典的权限控制)