首先,有这样一个系统:有个学生工作从达内毕业了,作的还不错.买了辆捷达汽车.这个系统应该如何设计呢?
按照OO的思想,我们会抽象出来一个类,表示捷达汽车,其中有个run()方法
public class JD{
public void run(){
System.out.println("JD在以120迈的速度在run");
}
}
我们还会抽象出一个类,来代表人.其中有个drive()方法,需要一个汽车类型作为参数,我们先传入一个JD类型的参数
// 这是我们的核心业务类
public class Person{
public void drive(JD jd){
jd.run();
}
public static void main(String args[]){
Person p =new Person();
JD jd = new JD();
p.drive(jd);
}
}
public class Benz{
public void run(){
System.out.println("Benz在以200迈的速度在run");
}
}
我们的核心业务类也要修改
public class Person{
/*
public void drive(JD jd){
jd.run();
}
*/
public void drive(Benz b){
b.run();
}
public static void main(String args[]){
Person p =new Person();
Benz b = new Benz();
p.drive(b);
}
}
以后的情况,我们可以把车抽象出来:
public abstract class Driver{
/*属性*/
public void run();//让子类来运行
}
public Benz extends Driver{
public void run(){
System.out.println("Benz在以200迈的速度在run");
}
}
public JD extends Driver{
public void run(){
System.out.println("JD is running...");
}
}
public class Person{
private Driver driver;
public Person(){
}
public Person(Driver driver){
this.driver = driver;
}
public void drive(){
driver.run();
}
public void setDriver(Driver driver){//运用参数多态,以后不管买什么车都可以
this.driver = driver;
}
public static void main(String args[]){
Person p =new Person();
JD jd = new JD();//刚开始没钱就买辆JD吧
p.setDriver(jd);
p.driver();
Benz benz = new Benz{();//有钱换车了
p.setDriver(benz);
p.driver();
}
}
/**
* 我们将多态使用在方法的返回类型中
* Car可以是抽象类,也可以是接口,JD和Benz分别继承该类或实现该借口
*/
public class CarFactory{
public Car factory(String carName){
if(carName.equals("JD")){
return new JD();
}else if(carName.equals("Benz")){
return new Benz();
}else{
System.out.println("对比起,不伺候");
return null;
}
}
}