开发者社区> 余二五> 正文

Net设计模式实例之桥接模式( Bridge Pattern)(3)

简介:
+关注继续查看

2、代码

1抽象接口CustomersBase及其具体实现类Customers
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 Add(string customer)
    {
        _dataObject.AddRecord(customer);
    }
 
    public virtual void Delete(string customer)
    {
        _dataObject.DeleteRecord(customer);
    }
 
    public virtual void Show()
    {
        _dataObject.ShowRecord();
    }
 
    public virtual void ShowAll()
    {
        Console.WriteLine("Customer Group: " + group);
        _dataObject.ShowAllRecords();
    }
}
 
/// <summary>
/// The 'RefinedAbstraction' class
/// </summary>
class Customers : CustomersBase
{
    // Constructor
    public Customers(string group)
 
        base(group)
    {
    }
    public override void ShowAll()
    {
        // Add separator lines
        Console.WriteLine();
        Console.WriteLine("**************************");
        base.ShowAll();
        Console.WriteLine("**************************");
    }
}
 
2抽象数据对象类DataObject及其具体实现类CustomersData
abstract class DataObject
{
    public abstract void NextRecord();
 
    public abstract void PriorRecord();
 
    public abstract void AddRecord(string name);
 
    public abstract void DeleteRecord(string name);
 
    public abstract void ShowRecord();
 
    public abstract void ShowAllRecords();
 
}
/// <summary>
/// The 'ConcreteImplementor' class
/// </summary>
class CustomersData : DataObject
{
    private List<string> _customers = new List<string>();
    private int _current = 0;
 
    public CustomersData()
    {
        // Loaded from a database
        _customers.Add("James Hao");
        _customers.Add("灵动生活");
        _customers.Add("**");
        _customers.Add("**");
        _customers.Add("**");
    }
 
    public override void NextRecord()
    {
        if (_current <= _customers.Count - 1)
        {
            _current++;
        }
    }
 
    public override void PriorRecord()
    {
        if (_current > 0)
        {
            _current--;
        }
    }
 
    public override void AddRecord(string customer)
    {
        _customers.Add(customer);
    }
    public override void DeleteRecord(string customer)
    {
        _customers.Remove(customer);
    }
    public override void ShowRecord()
    {
        Console.WriteLine(_customers[_current]);
    }
    public override void ShowAllRecords()
    {
        foreach (string customer in _customers)
        {
            Console.WriteLine(" " + customer);
        }
    }
}









本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/265773,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用C# (.NET Core) 实现状态设计模式 (State Pattern)
本文的概念性内容来自深入浅出设计模式一书 项目需求 这是一个糖果机的需求图.  它有四种状态, 分别是图中的四个圆圈: No Quarter: 无硬币 Has Quater 有硬币 Gumball Sold 糖果卖出 Out of Gumball 没有糖果了 这个图很像一个状态图.
1566 0
使用C# (.NET Core) 实现组合设计模式 (Composite Pattern)
本文的概念性内容来自深入浅出设计模式一书. 本文需结合上一篇文章(使用C# (.NET Core) 实现迭代器设计模式)一起看. 上一篇文章我们研究了多个菜单一起使用的问题. 需求变更 就当我们感觉我们的设计已经足够好的时候, 新的需求来了, 我们不仅要支持多种菜单, 还要支持菜单下可以拥有子菜单.
1262 0
使用C# (.NET Core) 实现迭代器设计模式 (Iterator Pattern)
本文的概念来自深入浅出设计模式一书 项目需求 有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单. 这两个菜单是这样的: 菜单项MenuItem的代码是这样的: 最初我们是这样设计的, 这是第一份菜单: 这是第2份菜单: 同时有两个菜单存在的问题 问题就是多个菜单把事情变复杂了.
901 0
使用C# (.NET Core) 实现模板方法模式 (Template Method Pattern)
本文的概念内容来自深入浅出设计模式一书. 项目需求 有一家咖啡店, 供应咖啡和茶, 它们的工序如下: 咖啡: 茶: 可以看到咖啡和茶的制作工序是差不多的, 都是有4步, 其中有两步它们两个是一样的, 另外两步虽然具体内容不一样, 但是都做做的同一类工作.
1189 0
使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有个老系统, 现在来了个新供应商的类, 但是它们的接口不同, 如何使用这个新供应商的类呢? 首先, 我们不想修改现有代码, 你也不能修改供应商的代码.
1580 0
使用C# (.NET Core) 实现命令设计模式 (Command Pattern)
本文的概念内容来自深入浅出设计模式一书. 项目需求 有这样一个可编程的新型遥控器, 它有7个可编程插槽, 每个插槽可连接不同的家用电器设备. 每个插槽对应两个按钮: 开, 关(ON, OFF).
753 0
使用C# (.NET Core) 实现单体设计模式 (Singleton Pattern)
本文的概念内容来自深入浅出设计模式一书 由于我在给公司做内培, 所以最近天天写设计模式的文章.... 单体模式 Singleton 单体模式的目标就是只创建一个实例. 实际中有很多种对象我们可能只需要它们的一个实例, 例如: 线程池,缓存, 弹出的对话框, 用于保存设置的类, 用于logging的类, 硬件设备驱动对象等等.
1078 0
使用C# (.NET Core) 实现抽象工厂设计模式 (Abstract Pattern)
本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 文将继续使用这个例子, 这里要用到抽象工厂.
1275 0
使用C# (.NET Core) 实现简单工厂(Simple Factory) 和工厂方法设计模式 (Factory Method Pattern)
本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子.   前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是接口(interface).
1260 0
使用C# (.NET Core) 实现装饰模式 (Decorator Pattern) 并介绍 .NET/Core的Stream
该文章综合了几本书的内容. 某咖啡店项目的解决方案 某咖啡店供应咖啡, 客户买咖啡的时候可以添加若干调味料, 最后要求算出总价钱. Beverage是所有咖啡饮料的抽象类, 里面的cost方法是抽象的.
1251 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载