标签:
思考问题:老板告诉秘书要到上海出差10天;老板告诉秘书要请8个人吃饭。如何设计?
解答:
1. 根据面相对象的思维,应该有一个Boss类,和Secretary秘书类,除此之外,还要有宾馆类Hotel,机场类Airport,酒店类Restaurant、司机类Chauffeur。
2. Boss对象只是跟秘书交谈而不是亲自去订机票和订房间等,所以机场类、酒店类、宾馆类和司机类四个组成一个子系统集,秘书类是一个外观角色类,对子系统中的四个类进行引用,Boss类无需知道子系统内部的各个类,只通过秘书安排工作。
机场
package com.shusheng.facade;
/**机场*/
public class Airport {
public void bookTicket(String from,String to){
System.out.println("订购了明天xx点从"+from+"到"+to+"的飞机票");
}
}
司机类
package com.shusheng.facade;
/**司机类*/
public class Chauffeur {
public void drive(String to){
System.out.println("司机开车去"+to);
}
}
宾馆
package com.shusheng.facade;
/**宾馆*/
public class Hotel {
/**订住房*/
public void reserve(int days){
System.out.println("订购了"+days+"天的房间");
}
}
酒店
package com.shusheng.facade;
/**酒店*/
public class Restaurant {
public void reserve(int num){
System.out.println("订了一桌"+num+"个人的酒席");
}
}
秘书
package com.shusheng.facade;
import java.util.Date;
/**秘书*/
public class Secretary {
private Airport airport = new Airport();
private Hotel hotel = new Hotel();
private Restaurant restaurant = new Restaurant();
private Chauffeur chauffeur = new Chauffeur();
/**安排出差*/
public void trip(String to,int days){
airport.bookTicket("北京",to);//订好机票(秘书必须知道自己在哪,所以不用传入出发地点)
chauffeur.drive("机场");//开车去机场
hotel.reserve(days);//订宾馆
}
/**安排饭局*/
public void repast(int num){
restaurant.reserve(num);
chauffeur.drive("酒店");
}
}
老板
package com.shusheng.facade;
/**老板类*/
public class Boss {
/**模拟老板与秘书的交谈*/
public static void main(String[] args) {
Secretary secretary = new Secretary();
System.out.println("老板告诉秘书要到上海出差10天");
secretary.trip("上海",10);
System.out.println("-----------------");
System.out.println("老板告诉秘书要请8个人吃饭");
secretary.repast(8);
}
}
标签:
原文地址:http://blog.csdn.net/petershusheng/article/details/51340854