C#设计模式:桥接模式(Bridge Pattern)
一,桥接模式,直接上代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _7.桥接模式
{
//桥梁模式的用意是"将抽象化与实现化脱耦,使得二者存在两个独立变化的维度:人和人的事件"
//抽象和实现沿着各自维度的变化,也就是说抽象和实现不再在同一个继承层次结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任何组合子类,从而获得多维度组合对象。
class Program
{
static void Main(string[] args)
{
People p1 = new Chinese(new ChineseSpeak());
p1.PossceEvent(); People p2 = new Usa(new UsaSpeak());
p2.PossceEvent();
}
} public abstract class People //抽象部分。该类保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现,该类一般为抽象类
{
private PeopleEvent peopleEvent { get; set; } //定义接口或抽象类变量
public People(PeopleEvent _peopleEvent) //构造注入,接口或抽象类的实例
{
this.peopleEvent = _peopleEvent;
}
public void PossceEvent() //抽象化与实现化脱耦
{
peopleEvent.Say();
}
} public abstract class PeopleEvent//实现部分。可以为接口或者是抽象类,其方法不一定要与抽象部分中的一致,一般情况下是由实现部分提供基本的操作,而抽象部分定义的则是基于实现部分基本操作的业务方法;
{
public abstract void Say();
} public class Chinese : People //优化的抽象部分。抽象部分的具体实现,该类一般对抽象部分的方法进行完善和扩展;
{
public Chinese(PeopleEvent _peopleEvent)
: base(_peopleEvent)
{ }
}
public class ChineseSpeak : PeopleEvent //实现部分的具体实现。完善实现部分中定义的具体逻辑。
{
public override void Say() //实现事件,这里针对不同的人,实现事件不一样,中国人说中文
{
Console.WriteLine("中国人说中文");
}
} public class Usa : People //优化的抽象部分。抽象部分的具体实现,该类一般对抽象部分的方法进行完善和扩展;
{
public Usa(PeopleEvent _peopleEvent)
: base(_peopleEvent)
{ }
}
public class UsaSpeak : PeopleEvent //实现部分的具体实现。完善实现部分中定义的具体逻辑。
{
public override void Say() //实现事件,这里针对不同的人,实现事件不一样,美国人说英语
{
Console.WriteLine("美国人说英语");
}
}
}
二,总结:
1,桥梁模式的用意是"将抽象化与实现化脱耦,使得二者存在两个独立变化的维度(如上代码的人和人的事件)
2,当我们看到将抽象化与实现化脱耦,就会想到依赖注入,不错,这里就是使用依赖注入的构造注入的思想,将抽象和现实解耦,也就是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。
3,但抽象和现实解耦还不是完全的桥梁模式,我们还需要使得二者可以独立地变化,那怎么才是独立的变化呢?
1》如上代码,抽象和实现沿着各自维度的变化,也就是说抽象和实现不再在同一个继承层次结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任何组合子类,从而获得多维度组合对象。
2》也就是根据上面的定义People可以有中国人和美国人,是一种维度的变化,而中国人和美国人又分别说不同的话,中文和英文这也是不同一个维度的变化,这也是抽象People和具体实现PeopleEvent,使得二者存在两个独立变化的理解
C#设计模式:桥接模式(Bridge Pattern)的更多相关文章
- 转:设计模式-----桥接模式(Bridge Pattern)
转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...
- C#设计模式——桥接模式(Bridge Pattern)
一.概述在软件开发中,我们有时候会遇上一个对象具有多个变化维度.比如对汽车对象来说,可能存在不同的汽车类型,如公共汽车.轿车等,也可能存在不同的发动机,如汽油发动机.柴油发动机等.对这类对象,可应用桥 ...
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
- 【设计模式】桥接模式 Bridge Pattern
开篇还是引用吕振宇老师的那篇经典的文章<设计模式随笔-蜡笔与毛笔的故事>.这个真是太经典了,没有比这个例子能更好的阐明桥接模式了,这里我就直接盗来用了. 现在市面上卖的蜡笔很多,各种型号, ...
- python 设计模式之桥接模式 Bridge Pattern
#写在前面 前面写了那么设计模式了,有没有觉得有些模式之间很类似,甚至感觉作用重叠了,模式并不是完全隔离和独立的,有的模式内部其实用到了其他模式的技术,但是又有自己的创新点,如果一味地认为每个模式都是 ...
- 二十四种设计模式:桥接模式(Bridge Pattern)
桥接模式(Bridge Pattern) 介绍将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象 ...
- 桥接模式(Bridge Pattern)
1,定义 桥接模式(Bridge Pattern),也称为桥梁模式,其用意是将抽象化与实现化脱耦,使得两者可以独立的变化,它可以使软件系统沿着多个方向进行变化,而又不引入额外的复杂 ...
- Net设计模式实例之桥接模式( Bridge Pattern)
一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...
- 七个结构模式之桥接模式(Bridge Pattern)
问题: 当存在多个独立的变化维度时,如果仍采用多层继承结构,会急剧的增加类的个数,因此可以考虑将各个维度分类,使他们不相互影响. 定义: 将抽象部分与它的实现部分进行分离,抽象部分只保留最为本质的部分 ...
- 设计模式 -- 桥接模式(Bridge)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初始桥接模式 ...
随机推荐
- ASPOSE的示例下载地址
ftp://112.124.7.170/ASPOSE/Aspose.Words_16.3.0.zip http://blog.163.com/haolongqin@126/blog/static/10 ...
- HTTP RESTful服务开发 spring boot+Maven +Swagger
这周配合第三方平台整合系统,需要提供HTTP REST服务和使用ActiveMQ推送消息,研究了下,做个笔记. 1.使用eclipse创建Spring Boot项目 创建Spring Boot项目( ...
- 第一次写的MySQLHelper
一. 第一次写MysqlHelper,用来管理城市的数据库 二.MySQLHelper源代码 using MySql.Data.MySqlClient; using System; using Sys ...
- Linux ssh内置sftp配置说明
centos7 环境下已验证 首先建立两个用户,用于sftp访问使用. eg: useradd -d /opt/sftp -s /bin/nologin sftp 说明 -s /bin/nologi ...
- Java面向对象(二) 接口、多态和泛型
一.接口 二.多态 多态是同一个行为具有多个不同表现形式或形态的能力. 2.1 类型转换 转换方式 隐式 向上转型 对于基本数据类型,存储容量低的可自动向存储容量高的类型转换 对于引用变量,子类可被转 ...
- 进入cmd的另外的一种方式
按Shift键+鼠标右键 进入powershell ,进入的界面和普通的shell界面不一样
- 学习日记3、投机取巧使两个表的数据同时在一个treeGrid中显示
不多说了直接上代码, $('#List').treegrid({ url: '@Url.Action("GetList")', width: $(window).width() - ...
- [CSP-S模拟测试]:sum(数学+莫队)
题目传送门(内部题63) 输入格式 第一行有一个整数$id$,表示测试点编号.第一行有一个整数$q$,表示询问组数.然后有$q$行,每行有两个整数$n_i,m_i$. 输出格式 一共有$q$行,每行一 ...
- 如何在微信小程序中使用iconfont
开篇废话 开发过小程序的童鞋肯定都会遇到这样的问题,当我们在小程序中使用iconfont官方推荐的方法插入字体时,我们总会得到一个打印机(滑稽).那么如何在小程序中正确的使用iconfont呢? 一. ...
- 建站手册-template
ylbtech-建站手册: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.cn ...