GoF定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
这个模式比较简单。
1、C#演示代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Appearance
{
internal class Program
{
static void Main(string[] args){
Appearance xx=new Appearance();
xx.ToDo1();
Console.WriteLine("");
xx.ToDo2();
}
}
public class ObjA{
public void ToDoA(){
Console.WriteLine("ObjA的执行");
}
}
public class ObjB
{
public void ToDoB()
{
Console.WriteLine("ObjB的执行");
}
}
public class ObjC
{
public void ToDoC()
{
Console.WriteLine("ObjC的执行");
}
}
public class Appearance{
private ObjA objA;
private ObjB objB;
private ObjC objC;
public Appearance()
{
this.objA = new ObjA();
this.objB = new ObjB();
this.objC = new ObjC();
}
public void ToDo1() {
objA.ToDoA();
objB.ToDoB();
}
public void ToDo2()
{
objB.ToDoB();
objC.ToDoC();
}
}
}
输出结果:
2、JavaScript演示代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>外观模式</title>
</head>
<body>
<div id="demo"></div>
<script>
function ObjA(){
this.ToDoA=function(){
PrintInfo("ObjA的执行");
};
}
function ObjB(){
this.ToDoB=function(){
PrintInfo("ObjB的执行");
};
}
function ObjC(){
this.ToDoC=function(){
PrintInfo("ObjC的执行");
};
}
function Appearance(){
this.ObjA=new ObjA();
this.ObjB=new ObjB();
this.ObjC=new ObjC();
this.ToDo1=function(){
this.ObjA.ToDoA();
this.ObjB.ToDoB();
};
this.ToDo2=function(){
this.ObjB.ToDoB();
this.ObjC.ToDoC();
}
}
function PrintInfo(Str){
document.getElementById("demo").innerHTML = document.getElementById("demo").innerHTML + Str+"<br>";
}
AA=new Appearance();
AA.ToDo1();
PrintInfo("");
AA.ToDo2();
</script>
</body>
</html>
网页里的输出:
ObjA的执行
ObjB的执行
ObjB的执行
ObjC的执行
3、PHP演示代码:
<?php
class Appearance{
private $ObjA;
private $ObjB;
private $ObjC;
function __construct(){
$this->ObjA=new ObjA;
$this->ObjB=new ObjB;
$this->ObjC=new ObjC;
}
function ToDo1(){
$this->ObjA->ToDoA();
$this->ObjB->ToDoB();
}
function ToDo2(){
$this->ObjB->ToDoB();
$this->ObjC->ToDoC();
}
}
class ObjA{
function ToDoA(){
echo "ObjA的执行。<br>";
}
}
class ObjB{
function ToDoB(){
echo "ObjB的执行。<br>";
}
}
class ObjC{
function ToDoC(){
echo "ObjC的执行。<br>";
}
}
$Appearance=new Appearance;
$Appearance->ToDo1();
echo "<br>";
$Appearance->ToDo2();
?>
网页里的输出:
ObjA的执行。
ObjB的执行。
ObjB的执行。
ObjC的执行。
4、Java演示代码:
class DesignAppearance{
public static void main(String[] args){
Appearance xx=new Appearance();
xx.ToDo1();
System.out.println("");
xx.ToDo2();
}
}
class ObjA{
public void ToDoA(){
System.out.println("ObjA的执行");
}
}
class ObjB{
public void ToDoB(){
System.out.println("ObjB的执行");
}
}
class ObjC{
public void ToDoC(){
System.out.println("ObjC的执行");
}
}
class Appearance{
private ObjA OA = new ObjA();
private ObjB OB = new ObjB();
private ObjC OC = new ObjC();
public Appearance(){
System.out.println("初始化");
}
public void ToDo1(){
OA.ToDoA();
OB.ToDoB();
}
public void ToDo2(){
OB.ToDoB();
OC.ToDoC();
}
}
结果输出:
5、Pthon演示代码:
class ObjA:
def todoA(self):
print("ObjA的执行")
class ObjB:
def todoB(self):
print("ObjB的执行")
class ObjC:
def todoC(self):
print("ObjC的执行")
class Appearance:
def __init__(self):
self.AA=ObjA()
self.BB=ObjB()
self.CC=ObjC()
def todo1(self):
self.AA.todoA()
self.BB.todoB()
def todo2(self):
self.BB.todoB()
self.CC.todoC()
xx=Appearance()
xx.todo1()
print("")
xx.todo2()
控制台输出:
ObjA的执行
ObjB的执行
ObjB的执行
ObjC的执行
6、C++演示代码
#include <iostream>
using namespace std;
class ObjA
{
public:
void ToDoA() {
std::cout << "ObjA的执行\n";
}
};
class ObjB
{
public:
void ToDoB() {
std::cout << "ObjB的执行\n";
}
};
class ObjC
{
public:
void ToDoC() {
std::cout << "ObjC的执行\n";
}
};
class Facade
{
public:
Facade() {
OA = new ObjA;
OB = new ObjB;
OC = new ObjC;
}
~Facade() {
delete OA;
delete OB;
delete OC;
}
void TODO1() {
OA->ToDoA();
OB->ToDoB();
}
void TODO2() {
OB->ToDoB();
OC->ToDoC();
}
private:
ObjA *OA;
ObjB *OB;
ObjC *OC;
};
int main()
{
Facade* APP = new Facade;
APP->TODO1();
APP->TODO2();
//delete APP;
system("pause");
return 1;
}
输出: