唐僧面对不同河流,火焰山,一般情况如何使用交通工具
package com.hspedu.Homework06;
public class Homework06 {
public static void main(String[] args) {
Person person = new Person("唐僧",new Boat());
person.passRiver();
person.common();
person.Volcanoland();
// System.out.println(person.vehicles);
}
}
//人面对普通路还是河的选择,选择后在工厂中调取使用马还是船,马和船的方法存在工厂里
interface Vehicles{
public void work();
}
//马不需要时时用都新建
class VehiclesFactory{
//马做成饿汉式,唯一一匹马
//1.构造器私有化 2.类的内部创建 3.向外暴露一个静态公共方法getHorse
private static Horse horse = new Horse();
private VehiclesFactory() {
}
//将方法做成static
public static Horse getHorse(){
return horse;
}
public static Boat getBoat(){
return new Boat();
}
public static Plane getPlane(){
return new Plane();
}
}
class Plane implements Vehicles{
@Override
public void work() {
System.out.println("火焰山使用飞机。。。");
}
}
class Horse implements Vehicles{
@Override
public void work() {
System.out.println("一般情况使用了马。。。");
}
}
class Boat implements Vehicles{
@Override
public void work() {
System.out.println("过河使用了船。。。");
}
}
//在人创建时,事先给他一个交通工具
class Person{
private String name;
private Vehicles vehicles;
public Person(String name, Vehicles vehicles) {
this.name = name;
this.vehicles = vehicles;
}
//如何让传入的交通工具构建对象的时候,做到不浪费对象
public void passRiver(){
//考虑到几种情况,null ,Boat, Horse... 使用instanceof把与River无关的类挑出来换工具
if (!(vehicles instanceof Boat)) {
//这里使用的是多态,向上转型
vehicles = VehiclesFactory.getBoat();
}
//这里体现使用接口调用
vehicles.work();
}
public void common(){
if (!(vehicles instanceof Horse)) {
vehicles = VehiclesFactory.getHorse();//vehicles 通过接口调用的
}
vehicles.work();
}
public void Volcanoland(){
if (!(vehicles instanceof Plane)){
vehicles = VehiclesFactory.getPlane();
}
vehicles.work();
}
}