标签:
比如我们有一个场景,学生要用笔写做作业。我们如果直接实现,那么当需求改变,学生要用笔画画的时候,我们就要修改作业类,那么就不符合开闭原则,而且每次拓展都会破坏之前的类,这样是不友好的,那么如何根据DIP来设计这个场景呢?
interface Tool{
public void doWork( Job job );
}
interface people{
public void use ( Tool tool , Job job );
}
interface Job{
public void finish();
}
我们抽象出了人,工作,任务三个抽象接口,然后我们利用人使用工具完成工作的场景对三个抽象接口建立关系
class Student1 implements Person{
@Override
public void use(Tool tool, Job job) {
System.out.print("Student use ");
tool.doWork(job);
}
}
class Pencil implements Tool{
@Override
public void doWork(Job job) {
System.out.print("Pencile to do ");
job.finish();
}
}
class HomeWork implements Job{
@Override
public void finish() {
System.out.println("Homework!!");
}
}
三个类可以并行实现,完全没有耦合关系,实现程序的模块化和并行开发
public class DIPTest {
public static void main ( String [] args ){
Person student = new Student1();
Tool pencil = new Pencil();
Job homeWork = new HomeWork();
student.use(pencil,homeWork);
}
}
当我们需要实现同样关系的新的类时,只需要拓展就可以了,比如老师用讲义授课依旧可以采取这种模式,可以按照模块进行开发,在团队开发项目的时候效果明显
就是利用一种契约的模式:
标签:
原文地址:http://blog.csdn.net/qq_24451605/article/details/51355701