外观模式/Facade模式(结构型)

思考问题:老板告诉秘书要到上海出差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);
    }
}

这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值