1(houseOwner.java,People.java,Worker.java,Decorator.java, Electricia.java,Woodworking.java,Geotechnical.java,Painter.java,Demo.java(调试展示类)):装修需要找土工,电工,木工,油漆工,四类工人,土工负责砌墙,贴瓷砖,电工负责埋电线和水管,木工负责做家具,油漆工负责粉刷,房东需要寻找这四种工人完成各自的任务。 具体要求:四类工人继承工人类,工人和房东都继承people类。 people 类具有:身份证号ID,姓名name,电话Tel,性别sex; 工人类worker具有:price(时薪),certificate(职业证书),company(所属公司); 四种工人都能实现室内装修(Decorator)的接口,该接口有一方法:doWork() 四种工人实现该接口,并实现doWork方法.
房东(houseOwner)有自己的属性:要装修的房子addr(字符串), 装修的钱decorateFund(实数), 房东有自己的方法:装修decorate(),该方法带参数,可以是电工,土工,油漆工,木工,执行内容为调用这些工人的doWork方法。能根据不同的工种打印出 我是土工,负责砌墙,贴瓷砖 我是电工,负责埋电线和水管 我是木工,负责做家具 我是油漆工,负责粉刷
2(Book.java,Boss.java,Secretary.java,Demo.java(调试展示类)):思考设计以下相关的类 秘书和老板都能预订酒店,老板告诉秘书房间价位在500到1500之间都可以预定,在500以下不预定,在1500元以上需经过老板同意。老板再根据具体情况(情况是否紧急等、自己发挥)决定是否预定酒店。 接口的代理模式(房产中介是房东的代理,它们都能实现出租和收租金,他们实现同一个接口。但有了中介,可以提前做些审核的工作,审核房东或求租者等一系列工作。以此类推,可以推广到所有相关的代理需求,如秘书和老板的关系(可以直接约老板也可以通过秘书预约,通过秘书就不用烦老板了,秘书会回绝一些不满足条件的客人等)).
3(Atm.java,Counter.java,Bank.java,Function.java,People.java,Demo.java(调试展示类)):ATM机和柜台工作人员都能实现取钱和存钱的功能,设计储户存取钱的操作,有两个参数:账号(存折或银行卡)和存取钱的设备(ATM机或柜台),思考,该如何设计相应的类和接口(抽象类)来实现前述功能,要注意存取钱具体实现的合理性? |
Electrician.java: public class Electrician extends Worker implements Decorator{//继承工人类以及一个装饰的接口 public void dowork(){//电工类的方法 System.out.println("我是电工,负责埋电线和水管。"); } } Woodworking.java: public class Woodworking extends Worker implements Decorator{//继承工人类以及一个装饰的接口 public void dowork(){//木工类的方法 System.out.println("我是木工,负责做家具。"); } } Geotechnical.java: public class Geotechnical extends Worker implements Decorator{//继承工人类以及一个装饰的接口 public void dowork(){//土工类的方法 System.out.println("我是土工,负责砌墙,贴瓷砖。"); } } Painter.java: public class Painter extends Worker implements Decorator{//继承工人类以及一个装饰的接口 public void dowork(){//油漆工类的方法 System.out.println("我是油漆工,负责粉刷。"); } } Decorator.java: public interface Decorator { public abstract void dowork();//接口,让接上的去实现具体方法 } People.java: public class People { public String id;//身份证号码 public String name;//姓名 public String tel;//电话号码 public String sex;//性别 People(){//默认的构造函数,有时候会用到
} People(String id,String name,String tel,String sex){//构造函数进行属性的初始化 this.id = id; this.name = name; this.tel = tel; this.sex = sex; } public void showInformation() {//展示个人信息的方法 System.out.println(this.name+"的信息如下:"); System.out.printf("姓名:%s 性别:%s 身份证号码:%s 电话号码:%s\n",this.id,this.sex,this.id,this.tel); } } Worker.java: public class Worker extends People{//工人类继承人类 public double price;//价格 public String certificate;//职业证书 public String company;//所属公司 Worker(){//因为父类有构造函数,所以子类也必须要有,不然不能对父类进行默认的构造函数 super(); } Worker(String id,String name,String tel,String sex,double price,String certificate,String company){ super(id,name,tel,sex);//构造函数的初始化 this.price = price; this.certificate = certificate; this.company = company; } } HouseOwner.java: public class houseOwner extends People{ public String addr;//装饰的地址 public String decorateFund;//装饰的资金 houseOwner(String id,String name,String tel,String sex,String addr,String money){ super(id,name,tel,sex);//初始化房东的个人信息以及装饰信息 this.addr = addr; this.decorateFund = money; } public void showDecorateInformation() {//展示装饰信息的方法 System.out.println("装修信息:"); System.out.printf("装修地点:%s 装修资金:%s\n",this.addr,this.decorateFund); } public void decorate(Decorator worker) {//雇佣工人的方法 worker.dowork(); } } Demo.java: public class Demo { public static void main(String[] args) { houseOwner owner = new houseOwner("3171911134","黄湘平","13110520342","男","福州","一百万");//初始化房东的信息以及装饰的信息 owner.showInformation();//展示房东的信息 owner.showDecorateInformation();//展示房东的装饰信息 owner.decorate(new Geotechnical());//请土工装饰的调用方法 owner.decorate(new Woodworking());//请木工装饰的调用方法 owner.decorate(new Electrician());//请电工装饰的调用方法 owner.decorate(new Painter());//请油漆工装饰的调用方法 } }
2.源程序代码(1个接口,3个类) Book.java: public interface Book {//预定酒店的接口 public abstract void book();//具体的方法由使用这个接口的对象来写 } Boss.java: public class Boss implements Book{//老板类继承预定的接口 public boolean situation;//老板的情况是否紧急 Boss(){//默认的构造函数,有时候会用上
} Boss(boolean situation){//初始化老板的情况是否紧急 this.situation = situation; } public void book() {//老板预定酒店的方法 System.out.println("老板预定酒店"); } public boolean condition() {//查看老板的情况是否紧急 if(this.situation) { System.out.println("情况紧急!!!"); return this.situation;//返回具体的紧急情况 }else { System.out.println("情况尚好。"); return this.situation;//与上面一样 } } } Secretary.java: public class Secretary implements Book{//秘书也接上预定酒店的接口 public int money;//酒店的价格 public Boss boss;//秘书的老板 public void bossTell(int money,Boss boss) {//酒店价格的初始化,以及老板的情况的初始化的方法 this.money = money; this.boss = boss; } public void book() {//秘书判断条件进行预定酒店 if(this.money>0 && this.money<500) {//0-500肯定预定 System.out.println("秘书预定酒店"); }else if(this.money>=500 && this.money<=1500) {//500-1500也预定 System.out.println("秘书预定酒店"); }else if(this.money>1500) {//如果大于1500,再查看老板的情况是否紧急 if(this.boss.condition()) {//如果紧急就预定 System.out.println("秘书预定酒店"); }else {//不紧急就不预定 System.out.println("价格较贵,不预定酒店"); } } }
} Demo.java: public class Demo { public static void main(String[] args) { Boss boss = new Boss(false);//初始化老板的情况不紧急 boss.book();//老板预定酒店 Secretary secretary = new Secretary();//初始化一个秘书 secretary.bossTell(1800,boss);//输入酒店价格,以及老板的情况 secretary.book();//判断之后进行是否预定酒店 } }
3.源程序代码(2个接口,6个类) CardType.java: public interface CardType {//卡的种类的接口 public abstract void bankSave(double money);//存钱的抽象方法 public abstract void bankDraw(double money);//取钱的抽象方法 public abstract void showAccount();//展示银行卡号或者存折号码的抽象方法 } OperateEquipment.java: public interface OperateEquipment {//接口 public abstract void equipmentShow(CardType type);//显示在什么设备展示的抽象方法 } Atm.java: public class Atm implements OperateEquipment{//ATM类接上操作设备的接口 public void equipmentShow(CardType type) { type.showAccount();//这个是展示银行卡号或者存折号码的方法 System.out.printf("在ATM机上,");//这个是显示在ATM设备操作的方法 } } Counter.java: public class Counter implements OperateEquipment{//柜台类接上操作设备的接口 public void equipmentShow(CardType type) { type.showAccount();//这个是展示银行卡号或者存折号码的方法 System.out.printf("在柜台上,");//这个是显示在柜台设备操作的方法 } } BankBook.java: public class BankBook implements CardType{ public String bankBookAccount;//存折号码 public static double sumMoney;//存折的总额应该是静态的 BankBook(){//默认的构造函数,有时候没有初始化就单纯new一个对象的时候用的上
} BankBook(String bankBookAccount){//初始化存折的号码以及总额 this.bankBookAccount = bankBookAccount; sumMoney = 0; } public void showAccount() {//展示存折号码的方法 System.out.println("存折号码:"+bankBookAccount); } public void bankSave(double money) {//往存折存钱的方法 sumMoney+=money; System.out.println("存"+money+"元"); System.out.println("存折余额:"+sumMoney); } public void bankDraw(double money) {//往存折取钱的方法 if(money>sumMoney) { System.out.println("存折余额不够"); }else { System.out.println("取"+money+"元"); sumMoney-=money; } System.out.println("存折余额:"+sumMoney); } } BankCard.java: public class BankCard implements CardType{//银行类 public String bankCardAccount;//银行卡号 public static double sumMoney;//银行卡的总额应该是静态的 BankCard(){//默认的构造函数,有时候没有初始化就单纯new一个对象的时候用的上
} BankCard(String bankCardAccount){//初始化银行卡的号码以及总额 this.bankCardAccount = bankCardAccount; sumMoney = 0; } public void showAccount() {//展示银行卡号的方法 System.out.println("银行卡号:"+bankCardAccount); } public void bankSave(double money) {//往银行卡存钱的方法 sumMoney+=money; System.out.println("存"+money+"元"); System.out.println("银行卡余额:"+sumMoney); } public void bankDraw(double money) {//往银行卡取钱的方法 if(money>sumMoney) { System.out.println("银行卡余额不足"); }else { System.out.println("取"+money+"元"); sumMoney-=money; } System.out.println("银行卡余额:"+sumMoney); } } User.java: public class User { public String name;//名字 public BankBook bankBook;//人的存折 public BankCard bankCard;//人的银行卡 User(){//默认的构造函数,有时候没有初始化就单纯new一个对象的时候用的上
} User(String name){//构造函数,对名字初始化 this.name = name; } public void createBankBook(String account) {//办存折的方法 this.bankBook = new BankBook(account); } public void createBankCard(String account) {//办银行卡的方法 this.bankCard = new BankCard(account); } public void operateSave(CardType bank,OperateEquipment equip,double money) {//存钱操作的方法 equip.equipmentShow(bank); bank.bankSave(money); } public void operateDraw(CardType bank,OperateEquipment equip,double money) {//取钱操作的方法 equip.equipmentShow(bank); bank.bankDraw(money); } } Demo.java: public class Demo { public static void main(String[] args) { User user = new User("黄湘平");//声明并初始化一个对象 Atm atm = new Atm();//声明并初始化一个ATM机 Counter counter = new Counter();//声明并初始化一个柜台 user.createBankBook("3171911134");//办存折 user.createBankCard("6212261400003388990");//办银行卡 user.operateSave(user.bankCard,atm,1000);//在ATM机往银行卡上存1000元 user.operateSave(user.bankBook,counter,2500);//在柜台往存折上存2500元 user.operateDraw(user.bankCard, counter, 500);//在柜台往银行卡上取500元 user.operateDraw(user.bankBook,counter,1000);//在柜台往存折上取1000元 user.operateDraw(user.bankCard, atm,800);//在ATM机往银行卡上取800元 } } |
实验四 面向抽象编程
最新推荐文章于 2023-09-13 14:52:56 发布