设计模式-基本概念及UML图
Java面向对象部分特性
抽象类和接口
抽象类可以有抽象方法也可以有非抽象方法
抽象类不能用new运算符创建
如果非抽象类继承了某个抽象类,那么必须实现里面所有的非抽象方法
抽象类声明的对象可以成为其子类向上转型的对象
接口中可以有public或者default类型的抽象方法,不可以有非abstract方法
如果一个类实现了一个接口,那么必须重写里面所有的abstract方法或者声明为abstract类
接口回调:可以把实现接口的类的对象的引用赋值给该接口声明的接口变量中
面向对象的几个基本原则
开闭原则
设计对扩展开放,对修改关闭
对abstract类的修改关闭,对abstract子类的扩展开放
多用组合少用继承
继承与复用
继承的优点是子类可以重写父类的方法,易于修改和扩展;
缺点是子类在编译时就确定下来,无法在运行期间改变从父类继承的方法和行为;子类和父类是强耦合关系,当父类方法的行为发生改变时,必然导致子类的方法发生改变;"白盒"复用,即父类的内部细节对子类是可见的
组合与复用
优点是:"黑盒"复用使得当前对象所包含对象方法的细节对当前对象不可见;对象与所包含的对象属于弱耦合关系,修改当前对象所包含的类的代码,不必修改当前类的代码;当前对象可以在运行时动态指定所包含的对象;
缺点是:容易导致系统中的对象过多,为了能组合多个对象,必须仔细地对接口进行定义
高内聚-低耦合
如果类中的方法是一组相关的行为,那么该类是高内聚的;
低耦合是尽量不要让一个类还有太多其他类的实例引用
迪米特法则
如果两个类不必直接通信,那么这两个类不应当发生直接的相互作用,如果其中一个类需要调用另一个类的话可以引入第三个类解决
UML类图
类图:+表示public #表示protected -表示private
接口:
泛化关系
泛化关系就是指类的继承关系,父类用空心三角形表示
关联关系
如果A类中的成员变量是用B类(接口)来声明的变量,那么A和B是关联关系,被关联的关系用黑色箭头指向或者没有指向
依赖关系
A类中某个方法的参数是用B类来声明的变量或者某个方法返回的数据类型是B类型的,那么A和B属于依赖关系,A依赖于B
有时候A关联于B也成A依赖于B,使用虚线连接的箭头表示
实现关系
如果一个类实现了另一个类的接口,那么类和接口属于实现关系,称类实现了接口