• Android设计模式(九)--外观模式


    问题:在Android中,Apk能够有微信,QQ为代表的插件式安装更新功能;

    那么问题来了,主系统(姑且这么说)调用插件式安装的子系统。由子系统提供对外的訪问。属不属于一种外观模式呢?


    先说设计模式:

    1、定义:

    为子系统中的一组接口提供一个统一接口。

    Facade模式定义了一个高层接口,这个接口使得这子系统更easy使用。

    2、目的:

    减少对子系统的复杂度和依赖。这使得子系统更易于使用和管理。

    提高代码的质量。代码维护性,扩展性。



    3、设计:

    在设计之初。就要有意识的将两个不同的层面分离。层与层之间建立外观的Facade,
    添加一个Facade能够提供一个简单的接口降低他们之间的依赖。



    这我们在Android编程的时候,能够有意识的将数据訪问和业务逻辑层严格分离开来。使得设计更加的低耦合。

    尤其是对子系统的维护上,子系统越来越大时,外观模式尤为重要!


    4、简单的demo:

    首先是子系统:

    package com.example.demo.Facade;
    /**
     * 子系统设计
     * @author qubian
     * @data 2015年6月9日
     * @email naibbian@163.com
     *
     */
    public abstract class Lottery {
    
    	protected abstract String getLotteryName() ;
    	
    	protected abstract String getLotteryNum() ;
    	
    	protected abstract String getRandomNum() ;
    	
    }
    package com.example.demo.Facade;
    
    public class SSQLottery extends Lottery{
    
    	@Override
    	protected String getLotteryName() {
    		return "SSQ";
    	}
    
    	@Override
    	protected String getLotteryNum() {
    		return "3";
    	}
    
    	@Override
    	protected String getRandomNum() {
    		return "6";
    	}
    
    }
    package com.example.demo.Facade;
    
    public class DLTLottery extends Lottery{
    
    	@Override
    	protected String getLotteryName() {
    		return "DLT";
    	}
    
    	@Override
    	protected String getLotteryNum() {
    		return "1";
    	}
    
    	@Override
    	protected String getRandomNum() {
    		return "7";
    	}
    
    }
    

    然后是Facade以及使用:

    package com.example.demo.Facade;
    /**
     * 外观模式
     * 统一对外訪问
     * @author qubian
     * @data 2015年6月9日
     * @email naibbian@163.com
     *
     */
    public class Facade {
    	SSQLottery ssq;
    	public String getLotteryName(String name)
    	{
    		if (name.equalsIgnoreCase("SSQ")) {
    			ssq = new SSQLottery();
    		}
    		return ssq.getLotteryName();
    	}
    	
    }
    package com.example.demo.Facade;
    
    import android.util.Log;
    
    public class UseFacade {
    
    	public void use()
    	{
    		Facade facade = new Facade();
    		Log.i("TAG", facade.getLotteryName("SSQ"));
    	}
    }
    

    demo 写的好像太简单了。只是,外观模式确实也算是用的比較多的,并且比較简单的模式;

    依照我的理解。

    从某种意义上来说。将插件式安装理解成一种外观模式。似乎显得跟简单,定义太浅显了一些,

    插件式的安装目的是为了启动子系统。除了唤起子系统以外,却非常少会由主系统调用到子系统内部的方法,当然也不排除有这种情况,

    若有则不太符合插件式安装与更新的目的;所以确实有些无解了。

    问题先留在此处了。



  • 相关阅读:
    在tmux中如何复制文本并粘贴到某处?
    linux下的用户密码文件/etc/shadow
    linux下openssl命令解析
    第 27 章 CSS 传统布局[下]
    第 27 章 CSS 传统布局[上]
    第 26 章 CSS3 动画效果
    第 25 章 CSS3 过渡效果
    第 24 章 CSS3 变形效果[下]
    第 23 章 CSS3 边框图片效果
    第 22 章 CSS3 渐变效果
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7255947.html
Copyright © 2020-2023  润新知