应用场景
用于事物与对应功能的分离,通过抽象,完成解耦。
例如:存在M个事物,N个功能,按照常见思路,将N个功能包含于M个事物中,则这些方法需要写MXN遍,代码冗余严重,且事物-功能强耦合,当功能变更或者增加功能时,需要同时改变M次orN次。
传统做法:
class m1{
fun1(){};
fun2(){};
……
funN(){};
}
class mM{
fun1(){};
fun2(){};
……
funN(){};
}
如果增加了某个方法,则需要继续更改。事物-功能强耦合,而且代码冗余度比较高,没有面向对象的思想。
OOP编程,则是面向接口-抽象类进行的,体现了人的思考过程。接口(抽象类)体现了思维过程,而具体的实现则是子类或者实现接口的类来实现。
拿个例子:对于信件和包裹都可以平邮、快递,那么就是2个事物,拥有2个功能;
1.定义接口:
public interface IPost{
public void post();
}
2.定义具体的动作
public class simplePost implements IPost{
@overide
public void post(){
system.out.println("This is simple post!");
}
}
public class fastPost implements IPost{
@overide
public void post(){
system.out.println("This is fast post");
}
}
3.定义抽象事物
Abstract class AbstractThings{
IPost ipost;
AbstractThings(IPost ipost){
this.ipost = ipost;
}
public void post(){
ipost.post();
}
}
4.定义具体事物
public class LetterThings extends AbstractThings{
LetterThings(Ipost obj){
super(obj);
}
}
public class ParcelThings extends AbstractThings{
ParcelThings(Ipost obj){
super(obj);
}
}
演示:
public Class Demo{
static void main(string[] args){
Ipost ipost = new simplePost();
AbstractThings letter = new LetterThings(ipost);
letter.post();
}
}
个人博客内容:http://nklongyi.com/