门面模式,又称外观模式.其定义是:"外部与一个子系统的通信必须通过一个统一的门面对象进行"
我们可以把它理解为一个只有一个单例的门面类
当然,一个由多个子系统组成的大系统,可以有多个门面类
基于对定义的理解,我们认为门面模式的主要目的是为了清理客户使用接口,对实现的接口的精简.虽然不符合接口隔离原则,但是如果合理的使用此模式,对软件系统的设计还是蛮有好处.
1.结构(如下图)
vcfJq7vhvavL+dPQtNO/zbuntsu3osC0tcTH68fzzq/FybW9z+DTprXE19PPtc2zyKWhozxicj4KMS4y19PPtc2zKHN1YnN5c3RlbSm9x8mrOr/J0tTTw8qx09DSu7j2u/LV37bguPbX08+1zbMuw7/Su7j219PPtc2ztryyu8rH0ru49rWltsC1xMDgLLb4ysfSu7j2wOC1xLyvus+ho8O/0ru49tfTz7XNs7a8v8nS1LG7v827p7bL1rG907X308Msu/LV37G7w8XD5r3Hyau199PDoaPX08+1zbOyorK71qq1wMPFw+a1xLTm1NosttTT2tfTz7XNs7b40dQsw8XD5r32vfbKx8Ht0ru49r/Nu6e2y7b40tE8YnI+Cjxicj4KMi7KtcD9PGJyPgogINK7vNLSvdKpuavLvizTydChseS08yzG5NOm08PX08+1zbOho7K7ts/U9rzTLsi7tvgsuPe49tfTz7XNs7XEtcfCvLj3tsDBoi7V4r2ruPi5q8u+tcS53MDt0+vQxc+isLLIq7e9w+a0+MC00v67vC7Su7j2us/A7bXEuea7rr/J0tTKuSzOqtSxuaTJ6LzG0ru49ta70OjNs9K7tcfCvNK7tM68tL/JvfjI67bguPbX08+1zbO1xLWlteO1x8K8uabE3CzS1L21tc3By7CyyKu1xLfWz+26zbncwO21xM/7usQuyei8xs280M7I58/CPGJyPgo8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/49/1_k1fsh__.png" alt="\">
2.1医药公司单点登录接口即Facade接口。子系统
2.2子系统1、子系统2、子系统3、子系统4、子系统....,即子系统
门面模式具备以下的一些优势:
1.门面模式,通过隐藏子系统的组件,降低客户处理对象数量,以提高各个子系统的应用便捷性
2.门面模式降低子系统于客户端程序的耦合度,促进了系统的可扩展性和可维护性。
3.门面模式通过层次化的结构方式可提升系统的稳定性
基于以上几点,我认为在以下级种情形下采用门面模式进行如软件设计与实施
1.当设计者要求隐藏旧系统时,克使用门面模式的接口去实馅??http://www.2cto.com/kf/yidong/wp/" target="_blank" class="keylink">WPGJyPgoyLsjnufvX08+1zbPWrrzktcTSwMC10NS9z7jfLL/Jzai5/cPFw+bEo8q9vfjQ0L21tc08YnI+CjMutbHX08+1zbPP4LWxuLTU08qxLL/Jzai5/cPFw+bEo8q9zOG5qb3PvPK1pbXEvdO/2izS1MzhuN/Wwc+1zbO1xNLX08PQ1NPrzsi2qNDUPGJyPgo8YnI+CtOm08Ozob6wo7o8YnI+CtPDteex5Lj8oaLTw7XnsajP+qGi08O159T2yN2hori2t9G1yMrHtefBprmry77Tqs/6z7XNs7XEuPe49tOqz/rStc7x19PPtc2zLLnCudGy0LyywM/Iy9PJ09rJ7czl1K3S8iyw7MDttMvA4NK1zvG3x7Ojsrux46GjzqrBy73ivvbV4tK7zsrM4iy158GmuavLvr/Jzai5/cno1sPJz8PFt/7O8S7TycnPw8W3/s7xyMvUsSzOqrnCudGy0LyywM/Iy7T6sOzTw7XnseS4/KGi08O157Go0N6hotPDtefU9sjdoaK4trfR0rXO8aGjucK50bLQvLLAz8jL1LHT68nPw8W3/s7xyMvUscGqz7Whozxicj4KPGJyPgo8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/49/1_0r0z7__.png" alt="\">
实例代码如下:
package model.facade;
/*
*电力营销业务接口
*/
public interface IElectricPowerMarketing {
//代办用电变更
public String electricityChange();
//用电报修
public String electricityBuild();
//用电增容
public String electricityAmplitude();
//付费
public String pay();
}
package model.facade;
/*
* 电力营销业务的实现类
*/
public class IElectricPowerMarketingImpl implements IElectricPowerMarketing{
//用电增容
public String electricityAmplitude() {
String a = "代办用电增容...";
System.out.println(a);
return a;
}
//用电报修
public String electricityBuild() {
String a = "代办用电报修...";
System.out.println(a);
return a;
}
//用电变更
public String electricityChange() {
String a = "代办用电变更...";
System.out.println(a);
return a;
}
//代办用点付费
public String pay() {
String a = "代办用电付费...";
System.out.println(a);
return a;
}
}
package model.facade;
/*
* 代办人类
*/
public class PublicAgent {
private IElectricPowerMarketing electricPowerMarketing = new IElectricPowerMarketingImpl();
//上门服务人员,为孤寡残疾老人提供办理、用电保修、用电增容用电变更、付费业务一体化服务
public String send |