版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangshuaionline/article/details/86004748
设计模式六大原则
定义:程序要依赖于抽象接口,不要依赖于具体实现。降低客户与实现模块间的耦合。
举例子:
有小明、小丽、小王三个同学,下面要让它们做自我介绍。
首先看看不用依赖倒置原则设计出来的程序:
public class Say {
class XiaoMing{
public void say(){
Log.w("打印","大家好,我叫小明!");
}
}
class XiaoLi{
public void say(){
Log.w("打印","大家好,我叫小丽!");
}
}
class XiaoWang{
public void say(){
Log.w("打印","大家好,我叫小王!");
}
}
public void say(String name){
if(name.equals("小明")){
XiaoMing xiaoMing = new XiaoMing();
xiaoMing.say();
}else if(name.equals("小丽")){
XiaoLi xiaoLi = new XiaoLi();
xiaoLi.say();
}else if(name.equals("小王")){
XiaoWang xiaoWang = new XiaoWang();
xiaoWang.say();
}
}
}
这样写三个还不明显,但是如果拓展下,全班50名学生每个人都要做自我介绍,那么就要写50词say()方法。并且一旦代码成型,要修改为每人唱一首歌,要修改多个地方,非常麻烦。
下面用依赖倒置原则简单修改下:
public class Say {
interface ToDo{
void say();
}
class XiaoMing implements ToDo{
@Override
public void say(){
Log.w("打印","大家好,我叫小明!");
}
}
class XiaoLi implements ToDo{
@Override
public void say(){
Log.w("打印","大家好,我叫小丽!");
}
}
class XiaoWang implements ToDo{
@Override
public void say(){
Log.w("打印","大家好,我叫小王!");
}
}
public void say(String name){
ToDo toDo = null;
if(name.equals("小明")){
toDo = new XiaoMing();
}else if(name.equals("小丽")){
toDo = new XiaoLi();
}else if(name.equals("小王")){
toDo = new XiaoWang();
}
toDo.say();
}
}
根据依赖倒置原则修改了之后,代码逻辑清晰,无论多少个学生,只需要调用一次say()方法即可,并且如果需要更换行为,只需要更换一次调用即可。