问题:在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 写的好像太简单了。只是,外观模式确实也算是用的比較多的,并且比較简单的模式;

依照我的理解。

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

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

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

问题先留在此处了。