利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...

|--需求说明

利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现两种手机打电话

|--解题思路

采用简单工厂模式,

设计四个角色: 工厂类、抽象产品类、具体产品类
工厂类------具体产品角色的调用者/生产者    (基站:baseStation)

抽象产品类------申明成抽象类或一个接口,是具体产品角色的一个定义,是客户看到的东西  (Phones)
具体产品类------就是具体的产品     (IPhone,APhone,WPone)
客户类-------客户角色,调用工厂产生具体实例的, 其实就是测试类  (Test)

由一个工厂类,根据客户传入的参数来决定创建/生产哪一种具体产品。

 

|--代码内容

1 //这个Phones类是一个抽象类
2 public abstract class Phones {
3     //定义一个抽象方法,call,用来被不同的类继承
4     public abstract void call();
5 }
抽象产品类---Phones
1 public class IPone extends Phones{
2 //重写父类的call方法,用来实现具体的苹果手机打电话
3     @Override
4     public void call() {
5         System.out.println("苹果手机打电话");
6     }
7 }
具体产品类----Iphone
1 public class APhone extends Phones {
2 //重写父类的call方法,用来实现具体的安卓手机打电话
3     @Override
4     public void call() {
5         System.out.println("安卓手机打电话");
6     }
7 }
具体产品类---APhone
1 public class WPhone extends Phones {
2 //重写父类的call方法,用来实现具体的Windows手机打电话
3     @Override
4     public void call() {
5         System.out.println("Windows Phone 手机打电话");
6     }
7 }
具体产品类---WPhone
 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 }
工厂类---BaseStation类
 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 }
客户类----User类

|--运行结果

利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话..._第1张图片

 

 

 |--错误记录

转载于:https://www.cnblogs.com/twuxian/p/11197381.html

你可能感兴趣的:(利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...)