⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bridgerealworld.cs

📁 使用C#程序将23个常用设计模式进行列表显示
💻 CS
字号:
using System;
using System.Windows.Forms;
using System.Collections;


//桥接模式(Bridge)
//意图
//    将抽象部分与它的实现部分分离,使它们都可以独立地变化。
//适用性
//    1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
//    2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
//    3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
//    4.有许多类要生成。这样一种类层次结构说明你必须将一个对象分解成两个部分。
//    5.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

namespace DesignPattern.BridgeRealWorld
{
    class BridgeRealWorld : AbstractPattern
    {
        public static void Run(TextBox tbInfo)
        {
            s_tbInfo = tbInfo;
            s_tbInfo.Text = "";

            // Create RefinedAbstraction 
            Customers customers = new Customers("Chicago"); 
            
            // Set ConcreteImplementor 
            customers.Data = new CustomersData(); 
            // Exercise the bridge 
            customers.Show(); 
            customers.Next(); 
            customers.Show(); 
            customers.Next();
            customers.Show(); 
            
            customers.New("Henry Velasquez"); 
            customers.ShowAll(); 
            
            // Wait for user 
            ////Console.Read();
        }
    }
    // "Abstraction" 
    class CustomersBase 
    {
        private DataObject dataObject; 
        protected string group; 
        public CustomersBase(string group) 
        {
            this.group = group; 
        }
        
        // Property 
        public DataObject Data 
        {
            set
            {
                dataObject = value; 
            }
            get
            {
                return dataObject; 
            }
        }
        
        public virtual void Next() 
        {
            dataObject.NextRecord();
        }
        public virtual void Prior()
        {
            dataObject.PriorRecord();
        }
        public virtual void New(string name) 
        {
            dataObject.NewRecord(name); 
        }
        public virtual void Delete(string name) 
        {
            dataObject.DeleteRecord(name); 
        }
        public virtual void Show() 
        {
            dataObject.ShowRecord();
        } 
        public virtual void ShowAll()
        {
            DesignPattern.FormMain.OutputInfo("Customer Group: " + group); 
            dataObject.ShowAllRecords(); 
        }
    } 
    
    // "RefinedAbstraction" 
    class Customers : CustomersBase 
    {
        // Constructor 
        public Customers(string group) : base(group) 
        {
        }
        
        public override void ShowAll() 
        {
            // Add separator lines 
            DesignPattern.FormMain.OutputInfo(""); 
            DesignPattern.FormMain.OutputInfo ("------------------------"); 
            base.ShowAll(); 
            DesignPattern.FormMain.OutputInfo ("------------------------"); 
        }
    }
    
    // "Implementor" 
    abstract class DataObject 
    {
        public abstract void NextRecord(); 
        public abstract void PriorRecord(); 
        public abstract void NewRecord(string name); 
        public abstract void DeleteRecord(string name); 
        public abstract void ShowRecord(); 
        public abstract void ShowAllRecords(); 
    }
    
    // "ConcreteImplementor" 
    class CustomersData : DataObject 
    {
        private ArrayList customers = new ArrayList(); 
        private int current = 0; 
        public CustomersData() 
        {
            // Loaded from a database 
            customers.Add("Jim Jones"); 
            customers.Add("Samual Jackson"); 
            customers.Add("Allen Good"); 
            customers.Add("Ann Stills"); 
            customers.Add("Lisa Giolani"); 
        }

        public override void NextRecord() 
        {
            if (current <= customers.Count - 1)
            {
                current++; 
            }
        }

        public override void PriorRecord() 
        {
            if (current > 0) 
            {
                current--;
            }
        }

        public override void NewRecord(string name) 
        {
            customers.Add(name); 
        }
        public override void DeleteRecord(string name)
        {
            customers.Remove(name);
        }

        public override void ShowRecord() 
        {
            DesignPattern.FormMain.OutputInfo(customers[current].ToString()); 
        }

        public override void ShowAllRecords() 
        {
            foreach (string name in customers) 
            {
                DesignPattern.FormMain.OutputInfo(" " + name); 
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -