java 设计模式之门面模式

门面模式简介

面模式(facade pattern),又称外观模式,为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简而言之,就是把一堆复杂的流程封装成一个接口供给用户更简单的使用,这个设计模式里有三个角色:
1)门面角色( facade ):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。
2)子系统角色(subsystem):实现了子系统的功能。对它而言, façade 角色就和客户角色一样是未知的,它没有任何 façade 角色的信息和链接。
3)客户角色:调用 façade 角色来完成要得到的功能。

具体案例

  1. 一个普通的小案例:

子系统及门面类

package sjms.mm.simple;

public class Fade {

    public void testA(){
        A a = new A();
        a.test();
    }

    public void testB(){
        B b = new B();
        b.test();
    }

    public void testC(){
        C c = new C();
        c.test();
    }
}


class A{
    public void test(){
        System.out.println("访问A");
    }
}

class B{
    public void test(){
        System.out.println("访问B");
    }
}

class C{
    public void test(){
        System.out.println("访问C");
    }
}

测试

package sjms.mm.simple;

public class Clinet {
    public static void main(String args[]){
        //传统调用子系统方法
        A a= new A();
        a.test();
        B b = new B();
        b.test();
        C c = new C();
        c.test();

        //门面类调用模式
        Fade face = new Fade();
        face.testA();
        face.testB();
        face.testC();
    }
}
  1. 再来个形象的案例吧,我们去旅游定一个旅馆:

    子系统有餐厅,打扫卫生,开房,泡温泉等等,一个门面类前台

package sjms.mm.complex;

public class HotelFade {
    //类似于前台一个门面对象,这儿如果有多个餐厅可以设计成数组,如果一个餐厅可以提供很多可以开启多线程。
    private ServiceFood food;
    private ServiceClean clean;
    private ServiceRoom room;
    //如果只有一个门面类,这儿可以设计成单例模式。
    HotelFade(){
        food = new ServiceFood();
        clean=new ServiceClean();
        room = new ServiceRoom();
    }

    public void servicefood(){
        food.service();
    }
    public void serviceclean(){
        clean.service();
    }
    public void serviceroom(){
        room.service();
    }
}

class ServiceFood{
    public void service(){
        System.out.println("吃饭:为你提供饭菜");
    }
}

class ServiceClean{
    public void service(){
        System.out.println("卫生:为你打扫卫生");
    }
}

class ServiceRoom{
    public void service(){
        System.out.println("住宿:为你开房");
    }
}

客户端测试:

package sjms.mm.complex;

public class Clinet {
    public static void main(String[] args) {
        HotelFade hf = new HotelFade();
        hf.serviceroom();    //开房
        hf.serviceclean();   //打扫房间
        hf.servicefood();    //上菜
        hf.serviceclean();   //打扫房间   具体没有写
        hf.serviceroom();     //退房
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值