C#设计模式(8)——桥接模式
一、概念
桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化。
二、模型

三、代码实现
// 客户端调用
// 类似Web应用程序
class Client
{
static void Main(string[] args)
{
BusinessObject customers = new CustomersBusinessObject("ShangHai");
customers.Dataacces = new CustomersDataAccess(); customers.Add("小六");
Console.WriteLine("增加了一位成员的结果:");
customers.ShowAll();
customers.Delete("王五");
Console.WriteLine("删除了一位成员的结果:");
customers.ShowAll();
Console.WriteLine("更新了一位成员的结果:");
customers.Update("Learning_Hard");
customers.ShowAll(); Console.Read();
}
} // BLL 层
public class BusinessObject
{
// 字段
private DataAccess dataacess;
private string city; public BusinessObject(string city)
{
this.city = city;
} // 属性
public DataAccess Dataacces
{
get { return dataacess; }
set { dataacess = value; }
} // 方法
public virtual void Add(string name)
{
Dataacces.AddRecord(name);
} public virtual void Delete(string name)
{
Dataacces.DeleteRecord(name);
} public virtual void Update(string name)
{
Dataacces.UpdateRecord(name);
} public virtual string Get(int index)
{
return Dataacces.GetRecord(index);
}
public virtual void ShowAll()
{
Console.WriteLine();
Console.WriteLine("{0}的顾客有:", city);
Dataacces.ShowAllRecords();
}
} public class CustomersBusinessObject : BusinessObject
{
public CustomersBusinessObject(string city)
: base(city) { } // 重写方法
public override void ShowAll()
{
Console.WriteLine("------------------------");
base.ShowAll();
Console.WriteLine("------------------------");
}
} /// <summary>
/// 相当于三层架构中数据访问层(DAL)
/// </summary>
public abstract class DataAccess
{
// 对记录的增删改查操作
public abstract void AddRecord(string name);
public abstract void DeleteRecord(string name);
public abstract void UpdateRecord(string name);
public abstract string GetRecord(int index);
public abstract void ShowAllRecords();
} public class CustomersDataAccess:DataAccess
{
// 字段
private List<string> customers =new List<string>(); public CustomersDataAccess()
{
// 实际业务中从数据库中读取数据再填充列表
customers.Add("Learning Hard");
customers.Add("张三");
customers.Add("李四");
customers.Add("王五");
}
// 重写方法
public override void AddRecord(string name)
{
customers.Add(name);
} public override void DeleteRecord(string name)
{
customers.Remove(name);
} public override void UpdateRecord(string updatename)
{
customers[] = updatename;
} public override string GetRecord(int index)
{
return customers[index];
} public override void ShowAllRecords()
{
foreach (string name in customers)
{
Console.WriteLine(" " + name);
}
} }
C#设计模式(8)——桥接模式的更多相关文章
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
- java面试题之----jdbc中使用的设计模式(桥接模式)
1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...
- php设计模式之桥接模式
php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...
- java设计模式7——桥接模式
java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...
- C++设计模式-Bridge桥接模式
作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...
- 设计模式之桥接模式(Bridge)
注:本文不属于原创,而是根据原文重新整理,原文是:我给媳妇解释设计模式:第一部分 设计模式不是基于理论发明的.相反,总是先有问题场景,再基于需求和情景不断演化设计方案,最后把一些方案标准化成“模式”. ...
- 【GOF23设计模式】桥接模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_桥接模式.多层继承结构.银行日志管理.管理系统消息管理.人力资源的奖金计算 未用桥接模式: package com.te ...
- js设计模式(3)---桥接模式
0.前言 看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处:二则是不能很好把握使用这些设计模式的时机.所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几 ...
- [设计模式] 7 桥接模式 bridge
#include<iostream> using namespace std; class AbstractionImp { public: virtual ~AbstractionImp ...
- java设计模式之桥接模式
桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦.这种模式涉及到一个作为桥接的 ...
随机推荐
- JQuery日记 5.11 Sizzle选择器(五)
//设置当前document和document相应的变量和方法 setDocument = Sizzle.setDocument = function( node ) { var hasCompare ...
- Android系统字体规范
我们在做Android移动APP设计的时候,字号的选择也是很让人头疼,转载一份有关Android系统字体规范,如果在做Android项目的用户应该看看,如果有任何建议欢迎在留言处与我们交流探讨. 主要 ...
- IDEA运行后控制台输出乱码
1.点击 2.点击 3.添加:-Dfile.encoding=UTF-8 . 4.点击OK
- setTimeout解决循环值的几种方法
for(var i=0;i<5;i++){ setTimeout(function(){ console.log(`错误 ${i}`); },0) } for(var i=0;i<5;i+ ...
- 提供的STC89C52RC单片机GPS在LCD1602液晶只显示welcome to use问题?
1.使用USB-TTL接GPS单独测试GPS定位在所处环境看是否能定位到. 2.检查自己使用的单片机是不是STC89C52RC型号,提供例程使用的这个型号单片机.如果使用其他51单片机,请先使用STC ...
- NeurIPS2018: DropBlock: A regularization method for convolutional networks
NIPS 改名了!改成了neurips了... 深度神经网络在过参数化和使用大量噪声和正则化(如权重衰减和 dropout)进行训练时往往性能很好.dropout 广泛用于全连接层的正则化,但它对卷积 ...
- python基础10 ---匿名函数和递归
一.匿名函数 1.lambda表达式就相当于匿名函数,其格式为: lambda 参数列表:参数表达式 2.lambda自带return值,因为匿名函数有个限制,就是只能有一个表达式,不用写return ...
- 模仿jquery框架源码 -生长---跨域访问
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- Stream computing
stream data 从广义上说,所有大数据的生成均可以看作是一连串发生的离散事件.这些离散的事件以时间轴为维度进行观看就形成了一条条事件流/数据流.不同于传统的离线数据,流数据是指由数千个数据源持 ...
- [原创]关于设置linux中vim 显示行号
1.更改所有账户配置 直接更改/etc/vimrc vim /etc/vimrc 在vimrc文件的最后添加 set nu 即可 wq退出. 这样,不论使用哪个账号登陆,vim打开后都显示行号 2.为 ...