设计模式之外观模式(C# / JavaScript / PHP / Java / Python / C++ 演示代码)

  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;
}

  输出:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值