|--需求说明
利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现两种手机打电话
|--解题思路
采用简单工厂模式,
设计四个角色: 工厂类、抽象产品类、具体产品类
由一个工厂类,根据客户传入的参数来决定创建/生产哪一种具体产品。
|--代码内容
1 //这个Phones类是一个抽象类 2 public abstract class Phones { 3 //定义一个抽象方法,call,用来被不同的类继承 4 public abstract void call(); 5 }
1 public class IPone extends Phones{ 2 //重写父类的call方法,用来实现具体的苹果手机打电话 3 @Override 4 public void call() { 5 System.out.println("苹果手机打电话"); 6 } 7 }
1 public class APhone extends Phones { 2 //重写父类的call方法,用来实现具体的安卓手机打电话 3 @Override 4 public void call() { 5 System.out.println("安卓手机打电话"); 6 } 7 }
1 public class WPhone extends Phones { 2 //重写父类的call方法,用来实现具体的Windows手机打电话 3 @Override 4 public void call() { 5 System.out.println("Windows Phone 手机打电话"); 6 } 7 }
1 public class BaseStation { 2 //将抽象产品类Phones作为返回类型,设定打电话方法 3 public Phones callPhone(String type) { 4 //判断客户提供的信息,按客户给定的信息判断使用什么样的手机打电话 5 if (type.equals("iphone")) { 6 return new IPone(); 7 } else if (type.equals("aphone")) { 8 return new APhone(); 9 } else { 10 return new WPhone(); 11 } 12 } 13 }
1 import java.util.Scanner; 2 public class User { 3 static Scanner sc = new Scanner(System.in); 4 5 public static void main(String[] args) { 6 //设定一个布尔变量,用于判定是不是要继续打电话 7 boolean flag = false; 8 //设定一个接受用户输入的变量 9 String answer; 10 //创建工厂类的实例 11 BaseStation ba = new BaseStation(); 12 //创建一个变量用于传递参数 13 String str; 14 do { 15 System.out.println("请问要使用什么手机打电话?1.Iphoen 2.Aphone 3或其他任意键.Wphoen"); 16 answer = sc.next(); 17 //如果用户按提示按键选择,则str得到一个具体的值 18 if ("1".equals(answer)){ 19 str = "iphone"; 20 }else if("2".equals(answer)){ 21 str = "aphone"; 22 23 }else { 24 str = "wphone"; 25 } 26 //将工厂类加工的方法传递给抽象产品类 27 Phones phones = ba.callPhone(str); 28 //抽象产品父类动态绑定具体产品类的方法 29 phones.call(); 30 System.out.println("还要打电话吗?按n退出,按其他任意字符继续打电话......"); 31 answer = sc.next(); 32 //按“n”退出,按其他任意键继续 33 if ("n".equals(answer)){ 34 flag = true; 35 } 36 System.out.println("************-------------**********\n\n"); 37 38 }while (!flag); 39 System.out.println("嗯,再见,你再用这么多手机打电话老子打死你"); 40 41 } 42 }
|--运行结果
无