要求:(B站 韩顺平P440)
这种方式使得代码的扩展性增强
package exercise;
public class Homework06 {
public static void main(String[] args) {
Person p1 = new Person("唐僧", new Horse());
p1.common();
p1.passRiver();
p1.common();
p1.common();
p1.passRiver();
}
}
interface Vehicles {
void work();
}
class Horse implements Vehicles{
@Override
public void work() {
System.out.println("使用马前进");
}
}
class Boat implements Vehicles{
@Override
public void work() {
System.out.println("过河时使用船");
}
}
class VehiclesFactory{
private static Horse horse = new Horse();
//构造器私有化为的是不让创建该类的对象
private VehiclesFactory(){}
public static Horse getHorse(){
//马始终是同一匹马
return horse;
}
public static Boat getBoat() {
return new Boat();
}
}
class Person {
private String name;
private Vehicles veh;
public Person(String name, Vehicles veh) {
this.name = name;
this.veh = veh;
}
//编程思想:把具体的要求封装成方法
public void passRiver(){
// if (!"exercise.Boat".equals(veh.getClass().getName().toString())){
if (!(veh instanceof Boat)){
veh = VehiclesFactory.getBoat();
}
veh.work();
}
public void common(){
// if(!"exercise.Horse".equals(veh.getClass().getName().toString())){
if (!(veh instanceof Horse)){
veh = VehiclesFactory.getHorse();
}
veh.work();
}
}
下面是增加了用飞机过火焰山的方法和飞机类
package exercise;
public class Homework06 {
public static void main(String[] args) {
Person p1 = new Person("唐僧", new Horse());
p1.common();
p1.passRiver();
p1.common();
p1.common();
p1.passRiver();
p1.huoyanshan();
}
}
interface Vehicles {
void work();
}
class Horse implements Vehicles{
@Override
public void work() {
System.out.println("使用马前进");
}
}
class Boat implements Vehicles{
@Override
public void work() {
System.out.println("过河时使用船");
}
}
class Plane implements Vehicles {
@Override
public void work() {
System.out.println("过火焰山时使用飞机");
}
}
class VehiclesFactory{
private static Horse horse = new Horse();
//构造器私有化为的是不让创建该类的对象
private VehiclesFactory(){}
public static Horse getHorse(){
//马始终是同一匹马
return horse;
}
public static Boat getBoat() {
return new Boat();
}
public static Plane getPlane() {
return new Plane();
}
}
class Person {
private String name;
private Vehicles veh;
public Person(String name, Vehicles veh) {
this.name = name;
this.veh = veh;
}
//编程思想:把具体的要求封装成方法
public void passRiver(){
// if (!"exercise.Boat".equals(veh.getClass().getName().toString())){
if (!(veh instanceof Boat)){
veh = VehiclesFactory.getBoat();
}
veh.work();
}
public void common(){
// if(!"exercise.Horse".equals(veh.getClass().getName().toString())){
if (!(veh instanceof Horse)){
veh = VehiclesFactory.getHorse();
}
veh.work();
}
public void huoyanshan() {
if (!(veh instanceof Plane))
veh = VehiclesFactory.getPlane();
veh.work();
}
}