zoukankan      html  css  js  c++  java
  • 【设计模式】结构型03外观模式(Facade Pattern)

    【设计模式】结构型02装饰模式(Decorator Pattern)

    意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

    主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

    何时使用:1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。2、定义系统的入口。

    如何解决:客户端不与系统耦合,外观类与系统耦合。


    代码:

    1、我这里有一个服务接口,持有一个对外提供服务的共有方法 provide(),本接口有三个实现类,分别是音乐窗口、视频窗口和学习窗口类:

    package com.pat.facade;
    /**
     * 外观模式,被统筹类的接口
     * @author ZX
     */
    public interface ServiceWindows {
    	//提供服务的方法
    	void provide();
    }
    /**
     * 音乐播放器接口
     * @author ZX
     *
     */
    class Music implements ServiceWindows{
    	@Override
    	public void provide() {
    		System.out.println("播放音乐~我的滑板鞋~滑板鞋~鞋~");
    	}
    	
    }
    /**
     * 视频播放器接口
     * @author ZX
     *
     */
    class Video implements ServiceWindows{
    	@Override
    	public void provide() {
    		System.out.println("播放视频~非洲农业不发达~就用金坷垃~~~");
    	}
    	
    }
    /**
     * 学习资料接口
     * @author ZX
     */
    class Study implements ServiceWindows{
    	@Override
    	public void provide() {
    		System.out.println("学习资料.zip》重命名 学习资料.avi");
    		System.out.println("开始播放:学习资料.avi");
    	}
    	
    }

    2、外观模式核心,提供一个面板类阻止对象,本类就是外观模式的核心:

    package com.pat.facade;
    /**
     * 外观模式核心-更高层的和新接口控制器,至于对象的创建可使用任何方式,这里采用最简单的方式
     * @author ZX
     *
     */
    public class FacadeController {
    	private ServiceWindows music;
    	private ServiceWindows video;
    	private ServiceWindows studyData;
    	
    	public FacadeController() {
    		this.music = new Music();
    		this.video= new Video();
    		this.studyData= new Study();
    	}
    	
    	
        public void playMusic() {
        	music.provide();
        }
        public void playVideo() {
        	video.provide();
        }
        public void beginStudy() {
        	studyData.provide();
        }
    }
    

    3、测试类:

    package com.pat.facade;
    /**
     * 测试类
     * @author ZX
     *
     */
    public class Test {
    	public static void main(String[] args) {
    		FacadeController fc = new  FacadeController();
    		fc.playMusic();
    		fc.playVideo();
    		fc.beginStudy();
    	}
    }
    

    4、结果:

    播放音乐~我的滑板鞋~滑板鞋~鞋~
    播放视频~非洲农业不发达~就用金坷垃~~~
    学习资料.zip》重命名 学习资料.avi
    开始播放:学习资料.avi

  • 相关阅读:
    Android开发:fragment将事件传递回activity
    Android开发:使用DialogFragment实现dialog自定义布局
    菜鸟的开始
    SAP HANA中创建计算视图(Calculation View)
    SAP HANA studio 创建分析视图
    SAP HANA 创建属性视图
    SAP HANA 能做什么
    SAP HANA 是什么?
    SAP BW 例程(Routine)【开始例程、关键值或特性的例程、结束例程】
    DSO分类及应用
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054134.html
Copyright © 2011-2022 走看看