——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、“开闭原则”
在讨论面向抽象和面向接口之前,先来粗略了解下“开闭原则”。
最近在搜索问题的时候总是会看到有人提到“开闭原则”的设计思想。今天就稍微总结下JavaSE中最能体现”开闭”思想的两部分。我觉得在学习早期或多或少的渗透理解一些思想,这种潜移默化的影响对于以后形成强大独到的设计思维体系大有益处。所以先来看下“开闭原则“。
一个好的软件的设计,在于更加容易被复用或维护。当修改某部分时,不会对其它部分造成影响。
“开闭原则”正是面向对象程序语言的可复用设计的基石,其它的模式如里氏替换、依赖注入、迪米特原则都是开闭原则的具体实现工具。
1.定义:一个程序应当对扩展开放,而对修改关闭。
2.好处:
(1)在对程序扩展之后,程序拥有了新的功能,使得程序不会因为需求的变化而淘汰。
(2)程序不能再被修改,即自身高度提取的抽象层不能被随意修改,体现了程序的稳定性。
3.实现原则
在开闭原则的设计中,首先要有“闭”的东西才能”开”才能被扩展,所以什么东西需要关闭是关键。
一般在面向对象设计过程中,我们要把对象的共性特征提取出来抽象化,让具体细节由子类实现。这样我们在抽象层面考虑问题就简单化,统一化了。
当把最本质的共性特征提取后,自然就想到了用抽象类和接口来关闭它。
二、面向抽象设计
1.回顾抽象类
抽象类用abstract关键字来声明,抽象类中可以包含抽象方法,抽象方法是只有方法声明部分的特殊方法,用abstract来修饰,通过子类的重写使用。除此之外,抽象类和普通类相同。
2.面向抽象
比如我们要设计一个用来计算几何柱体体积的类:
public class Size{
private double floor=0;//底面积
private double high=0;//高
public Size(double high){
this.high=high;
}
//获取体积的方法
public double