把具体要求封装成对象(面向对象的总和使用小题)

要求:(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();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值