统一求存(Facade)

原创 2003年07月14日 15:57:00

 

感觉有点政治的味道.当然.我们并不讨论政治.只是在说明很多情况下都必须进行的一种措施

事实上.当你并不想为每一个子系统建立独立的操作的时候.你也许更加希望能够有一个单一

的操作方案可供选择.那要不必为每个子系统都寻求其特有的操作方案.使操作变的单一.Facde

就可以做到这一点.

假设你有三个播音设备.分别使CD 磁带机,Mp3 它们分别有自己独立的操作放案.这让你很头痛

因为你必须掌握三套类似却有相对独立的方案.那么我们考虑如何解决

class CDPlay{
 private  string SongName;
 CDPlay(string sn){
  SongName=sn;
 }

 public void PlayCd(){
    Console.WriteLine("Play Cd" + SongName);
 }
 
 public void StopCd(){
  Console.WriteLine("Stop Cd");
 }

}

class RecordPlay{
 private  string SongName;
 RecordPlay(string sn){
  SongName=sn;
 }

 public void PlayRecord(){
    Console.WriteLine("Play Record" + SongName);
 }
 
 public void StopRecordd(){
  Console.WriteLine("Stop Record");
 }
}

class Mp3Play{
 private  string SongName;
 CDPlay(string sn){
  SongName=sn;
 }

 public void PlayMp3(){
    Console.WriteLine("Play Mp3" + SongName);
 }
 
 public void StopMp3(){
  Console.WriteLine("Stop Mp3");
 }
}

 

//下面我们建立统一的界面

class Facade {
 private Mp3Play mp3;
 private RecordPlay rp;
 private CDPlay cd;
 
 private string playName;
 private  string songName;

 public string PlayName{
  get{return playName;};
  set{playName=value;};
 }
 
 public string SongName{
  get{return SongName;};
  set{SongName=value;};
 }

 public Facade(string pn,string sn){
   playName=pn;
   songName=sn;
 }
 
 public void play(){
   switch(playName){
     case "CD":
     Cd=new CDPlay(songName);
     Cd.PlayCd();
    case "mp3":
     mp3=new Mp3Play(songName);
     mp3.PlayMp3();
    case "Record":
     rd=new RecordPlay(songName);
     rd.PlayRecord();
   }
 }
 
 public void stop(){
    case "CD":
     Cd=new CDPlay(songName);
     Cd.stopCd();
    case "mp3":
     mp3=new Mp3Play(songName);
     mp3.stopMp3();
    case "Record":
     rd=new RecordPlay(songName);
     rd.stopRecord();
 }
}


//调用

public class Client
    {
       public static int Main(string[] args)
  {
   Facade facade = new Facade("CD");
   facade.play();
                        facade.Stop();

                        facade.PlayName="mp3";
                        facade.play();
                        facade.Stop();

                        facade.PlayName="Record";
                        facade.play();
                        facade.Stop();
            return 0;
        }
    }

这样我们只需要一个统一的界面.而不需要知道其每个子系统是如何特别定制的.

Java 设计模式 之 facade(外观)设计模式

Facade模式要求一个子系统的外部与其内部的通信通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。       当子系统经过不断的演变,变得异常复杂时,...
  • u010349169
  • u010349169
  • 2014年01月28日 17:24
  • 2922

关于FACADE框架使用总结。

以下全部都是本人使用感觉:如有错误,等等请留言。咱共同进步 特点:易于维护,层次分明。重用性高。 不足:不灵活。好麻烦。报错不完整。(对于刚上手的我来说) 针对我们原来的模块功能。因为需求的增加和变...
  • chi4419424
  • chi4419424
  • 2014年03月03日 14:05
  • 569

求存与求真

从正反向度,应该分为求存与非求存。为什么说求真,求真程序员与读书人喜欢钻的牛角尖。求真只是非求存的一种。 什么叫求存。 求生存,DNA存承,物种的延续。 什么叫求真。 格物穷理,探求真...
  • sinat_34279882
  • sinat_34279882
  • 2016年03月14日 10:03
  • 352

浅谈 Facade 模式

Facade 模式 所谓 Facade 模式,是一个可以让事情变得有点头绪的好东西。   一个 Facade 肯定是一位某方面的“行家”,例如数据库操作。它对来自上层的请求屏蔽了具体的业务逻辑细节,任...
  • shimiso
  • shimiso
  • 2010年04月26日 22:49
  • 1851

AAPT err(Facade for 1660295362): libpng error: Not a PNG file

具体问题体现在: AAPT err(Facade for 1660295362): libpng error: Not a PNG file Error:Execution failed ...
  • CVSDN
  • CVSDN
  • 2016年07月15日 16:17
  • 621

facade的调用原理和过程

1.一个类 如  ....CacheManager.php 2.一个provider ... CacheServiceProvider 3. class CacheServiceProvider ex...
  • zxc7928932
  • zxc7928932
  • 2015年10月21日 02:17
  • 988

23种设计模式(1)-Facade设计模式

前记        曾经我遇见的一个需求是这样的,接口A有个方法void methodA(),类B需要实现接口A的methodA()方法,并且在类B中需要把methodA()方法内部处理逻辑获得的结...
  • duchao123duchao
  • duchao123duchao
  • 2016年05月16日 14:47
  • 3389

接口型模式之Facade(外观)模式

1.如果你期望为一组类提供一个简单的接口,可使用Facade(外观)模式。 2.举例: 2.1uml模型 2.2源码//模拟第一个操作:打开第一个抽屉 public class Drawer...
  • u014686875
  • u014686875
  • 2016年04月06日 13:46
  • 719

浅谈Facade层,Service层,DAO层设计原则

一,Service->DAO,只能在Service中注入DAO。二,DAO只能操作但表数据,跨表操作放在Service中,Service尽量复用DAO,只有一张表产生的业务放入DAO中。三,事务操作,...
  • jasph77
  • jasph77
  • 2008年06月19日 17:54
  • 6054

Laravel Facade 实现原理揭秘

在使用Laravel 框架的时候会看到很多 Cache::get() 这样的用法,称之为 Facade,门面。 但是代码中即没有看到使用 Cache 相关的命名空间,且在 Composer 自动加载中...
  • hizzana
  • hizzana
  • 2016年11月18日 09:01
  • 2901
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:统一求存(Facade)
举报原因:
原因补充:

(最多只允许输入30个字)