(1)综合性高
1.题目
1.有一个交通工具接口类Vehicles,有work接口 2.有Horse类和Boat类分别实现Vehicles 3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat 4.有Person类,有name 和 Vehicles 属性 在构造器中为两个属性赋值 5.实例化Person 对象“唐僧”,要求一般情况下用Horse 作为交通工具,遇到大河时用Boat 作为交通工具使用代码实现上面的要求 6.“唐僧”坐飞机过火焰山
2.所用方法
1.单例工厂模式 --->饿汉式
要求:马儿始终是同一匹,不创建new新的马
private static Horse horse = new Horse(); //饿汉式 //构造器 私有化 private VehiclesFactory() { }
2.把具体的要求封装成方法
if (vehicles == null) { Boat boat = VehiclesFactory.getBoat(); } boat.work(); }
仍然不能解决问题
if (vehicles == null) 会导致输出两次马 应为传入的马不为null
防止始终使用的是传入的马
解决方法 : instanceOf
if (!(vehicles instanceof Boat)) { //这里使用的是多态 vehicles = VehiclesFactory.getBoat(); } //体现了接口调用 vehicles.work(); } //vehicles instanceof Boat 是判断 当前的 Vehicles 是不是 Boat //(1) vehicles = null : vehicles instanceof Boot => false //(2) vehicles = 马对象 : vehicles instanceof Boot => false //(3) vehicles = 船对象 : vehicles instanceof Boot => True
false 就通过该限制执行下面的代码, True则输出船对象的方法和属性。
3.接口的使用
public interface Vehicles { //1.有一个交通工具接口类Vehicles,有work接口 public void work(); }//调用
public class Boat implements Vehicles{ //2.有Horse类和Boat类分别实现Vehicles @Override public void work() {
三个类都需要用上
(2)代码
1.Vehicles -- 接口
package com.wzqxi.Homework.Homework06;
/**
* @author 王志强
* @version 1.0
**/
public interface Vehicles {
//1.有一个交通工具接口类Vehicles,有work接口
public void work();
}
2.Person.java
package com.wzqxi.Homework.Homework06;
/**
* @author 王志强
* @version 1.0
**/
public class Person {
private String name;
private Vehicles vehicles;
//
public Person(String name, Vehicles vehicles) {
this.name = name;
this.vehicles = vehicles;
}
//5.实例化Person 对象“唐僧”,要求一般情况下用Horse 作为交通工具,遇到大河时用Boat
//* 作为交通工具使用代码实现上面的要求
//这里涉及到一个编程思路,就是可以把具体的要求封装成方法
public void passRiver() {
//先得到船
//判断一下,当前 vehicles 属性是null,就获取一艘船
// Boat boat = VehiclesFactory.getBoat();
// boat.work();
//如何防止始终使用的是传入的马 instanceOf
// if (vehicles == null) {
//vehicles instanceof Boat 是判断 当前的 Vehicles 是不是 Boat
//(1) vehicles = null : vehicles instanceof Boot => false
//(2) vehicles = 马对象 : vehicles instanceof Boot => false
//(3) vehicles = 船对象 : vehicles instanceof Boot => True
if (!(vehicles instanceof Boat)) {
vehicles = VehiclesFactory.getBoat();
}
vehicles.work();
}
public void common() {
//得到马儿
//判断一下,当前 vehicles 属性是null,就获取一匹马
if (!(vehicles instanceof Horse)) {
//这里使用的是多态
vehicles = VehiclesFactory.getHorse();
}
vehicles.work();
}
//过火焰山
public void passFireHill() {
if (!(vehicles instanceof Plane)) {
//这里使用的是多态
vehicles = VehiclesFactory.getPlane();
}
//体现了接口调用
vehicles.work();
}
}
//4.有Person类,有name 和 Vehicles 属性 在构造器中为两个属性赋值
3.VehiclesFactory.java
package com.wzqxi.Homework.Homework06;
/**
* @author 王志强
* @version 1.0
**/
public class VehiclesFactory {
//马儿始终是同一匹
private static Horse horse = new Horse(); //饿汉式
//构造器 私有化
private VehiclesFactory() {
}
//3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
//将方法做成static
//先完成在优化
public static Horse getHorse() {
return horse;
}
public static Boat getBoat() {
return new Boat();
}
public static Plane getPlane() {
return new Plane();
}
}
4.Boat.java
package com.wzqxi.Homework.Homework06;
/**
* @author 王志强
* @version 1.0
**/
public class Boat implements Vehicles{
//2.有Horse类和Boat类分别实现Vehicles
@Override
public void work() {
System.out.println(" 小船过河...");
}
}
5.Horse.java
package com.wzqxi.Homework.Homework06;
/**
* @author 王志强
* @version 1.0
**/
public class Horse implements Vehicles{
//2.有Horse类和Boat类分别实现Vehicles
@Override
public void work() {
System.out.println(" 一般情况下,使用马儿前进...");
}
}
6.Plane.java
package com.wzqxi.Homework.Homework06;
/**
* @author 王志强
* @version 1.0
**/
public class Plane implements Vehicles{
@Override
public void work() {
System.out.println("过火焰山,咋们用飞机~~~");
}
}
7.main -- Homework06.java
package com.wzqxi.Homework.Homework06;
/**
* @author 王志强
* @version 1.0
**/
public class Homework06 {
public static void main(String[] args) {
Person tang = new Person("唐僧", new Horse());
tang.common(); //一般情况下
tang.passRiver(); //马儿过河
tang.common();
tang.passRiver();
tang.passRiver();
tang.passRiver();
//过火焰山
tang.passFireHill();
}
}
/*
* 1.有一个交通工具接口类Vehicles,有work接口
* 2.有Horse类和Boat类分别实现Vehicles
* 3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
* 4.有Person类,有name 和 Vehicles 属性 在构造器中为两个属性赋值
* 5.实例化Person 对象“唐僧”,要求一般情况下用Horse 作为交通工具,遇到大河时用Boat
* 作为交通工具使用代码实现上面的要求
* */