zoukankan      html  css  js  c++  java
  • bridgeopenbook.cs

    using System;
    using System.Collections.Generic;
     
      // Bridge Pattern Example                           Judith Bishop Dec 2006, Aug 2007
      // Extending SpaceBook with a second implementation via a Portal
     
      // Abstraction  
      class Portal  {
        Bridge bridge;
        public Portal (Bridge aSpaceBook) {
          bridge = aSpaceBook;
        }
        public void Add(string message)
           {bridge.Add(message);}
        public void Add(string friend, string message)
           {bridge.Add(friend,message);}
        public void Poke(string who)
           {bridge.Poke(who);}
      }
     
      //Bridge
      interface Bridge {
        void Add(string message);
        void Add(string friend, string message);
        void Poke(string who);
      }
     
      class SpaceBookSystem {  
     
        // The Subject
        private class SpaceBook {
          static SortedList <string,SpaceBook> community =
              new  SortedList <string,SpaceBook> (100);
          string pages;
          string name;
          string gap = "\n\t\t\t\t";
        
          static public bool IsUnique (string name) {
            return community.ContainsKey(name);
          }
        
          internal SpaceBook (string n) {
            name = n;
            community [n] = this;
          }
        
          internal string Add(string s) {
            pages += gap+s;
            return gap+"======== "+name+"'s SpaceBook ========="+
                      pages+"\n"+
                    gap+"================================";
          }
        
          internal string Add(string friend, string message) {
             return community[friend].Add(message);
            }
          
          internal void Poke (string who, string friend) {
            community[who].pages += gap + friend + " poked you";
          }
        }

     
        // The Proxy (CANNOT CHANGE)
        public class MySpaceBook {
          // Combination of a virtual and authentication proxy
          SpaceBook mySpaceBook;
          string password;
          string name;
          bool loggedIn = false;
          
          void Register () {
            Console.WriteLine("Let's register you for SpaceBook");
            do {
              Console.WriteLine("All SpaceBook names must be unique");
              Console.Write("Type in a user name: ");
                name = Console.ReadLine();
            } while (SpaceBook.IsUnique(name));
            Console.Write("Type in a password: ");
            password = Console.ReadLine();
            Console.WriteLine("Thanks for registering with SpaceBook");
          }
     
          bool Authenticate () {
            Console.Write("Welcome "+name+". Please type in your password: ");
            string supplied = Console.ReadLine();
            if (supplied==password)  {
              loggedIn = true;
                Console.WriteLine( "Logged into SpaceBook");
              if (mySpaceBook == null)
                mySpaceBook = new SpaceBook(name);
              return true;
            }
            Console.WriteLine("Incorrect password");
            return false;
          }
        
          public void Add(string message) {
            Check();
            if (loggedIn) mySpaceBook.Add(message);
          }
        
          public void Add(string friend, string message) {
            Check();
            if (loggedIn)
              Console.WriteLine(mySpaceBook.Add(friend, name + " said: "+message));
          }
        
          public void Poke(string who) {
            Check();
            if (loggedIn)
              mySpaceBook.Poke(who,name);
          }
        
          void Check() {
            if (!loggedIn) {
              if (password==null)
                 Register();
                if (mySpaceBook == null)
                 Authenticate();
            }
          }
        }
     
        // A Proxy with little to do
        // Illustrates an alternative implementation in the Bridge pattern
        public class MyOpenBook : Bridge {
          // Combination of a virtual and authentication proxy
          SpaceBook myOpenBook;
          string name;
          static int users;
          
          public MyOpenBook (string n) {
            name = n;
            users++;
            myOpenBook = new SpaceBook(name+"-"+users);
          }
          
          public void Add(string message) {
             Console.WriteLine(myOpenBook.Add(message));
          }
          
          public void Add(string friend, string message) {
            Console.WriteLine(myOpenBook.Add(friend, name + " : "+message));
          }
          
          public void Poke(string who) {
            myOpenBook.Poke(who,name);
          }
        }
      } // end class SpaceBookSystem

      static class OpenBookExtensions {
        public static void SuperPoke (this Portal me, string who, string what) {
          me.Add(who, what+" you");
        }
      }
     
      // The Client
      class BridgePattern : SpaceBookSystem {
        static void Main () {
           Portal me = new Portal(new MyOpenBook("Judith"));
           me.Add("Hello world");
           me.Add("Today I worked 18 hours");
          
           Portal tom = new Portal(new MyOpenBook("Tom"));
           tom.Poke("Judith-1");
           tom.SuperPoke("Judith-1","hugged");
           tom.Add("Judith-1","Poor you");
           tom.Add("Hey, I'm on OpenBook - it was so easy!");
        }
      }
    /* Output
    Let's register you for SpaceBook
    All SpaceBook names must be unique
    Type in a user name: Judith
    Type in a password: yey
    Thanks for registering with SpaceBook
    Welcome Judith. Please type in your password: yey
    Logged into SpaceBook

            ======== Judith's SpaceBook =========
            Hello world
            Today I worked 18 hours
            Tom poked you
            Tom : hugged you

            ================================

            ======== Judith's SpaceBook =========
            Hello world
            Today I worked 18 hours
            Tom poked you
            Tom : hugged you
            Tom : Poor you

            ================================

            ======== Tom-1's SpaceBook =========
            Hey, I'm on OpenBook - it was so easy!

            ================================
    */
  • 相关阅读:
    简单工厂
    Asp.Net Catch的应用
    ADO和ADO.NET的区别
    PLSql语句学习(三)
    三层结构的B/S系统(收藏)
    MVC 模式
    利用.net反射动态调用指定程序集的中的方法
    .NET反射的简单示例
    ToString格式化
    HTML:关于位置的几个概念
  • 原文地址:https://www.cnblogs.com/shihao/p/2494730.html
Copyright © 2011-2022 走看看