用代码和UML图化解设计模式之桥接模式的深入分析_C 语言

桥接模式就是 独立和实现相分离。
不同的厂家生产不同的产品。。。。产品和厂家有这组合的关系。

上代码

复制代码 代码如下:

// Bridge.cpp : 定义控制台应用程序的入口点。
/************************************************************************/  
#include "stdafx.h"
#include <iostream>
using namespace std;
class Product
{
public:
 Product(){}
 virtual ~Product(){}

 virtual void make()=0;
 virtual void sell()=0;
};
class ProductA:public Product
{
public:
 ProductA(){}
 virtual ~ProductA(){}
 virtual void make()
 {
  cout<<"ProductA:make()"<<endl;
 }
 virtual void sell()
 {
  cout<<"ProductA:sell()"<<endl;
 }
};
class ProductB:public Product
{
public:
 ProductB(){}
 virtual ~ProductB(){}
 virtual void make()
 {
  cout<<"ProductB:make()"<<endl;
 }
 virtual void sell()
 {
  cout<<"ProductB:sell()"<<endl;
 }
};
class Corp
{
public:
 Corp(Product* pro)
  :m_product(pro)
 {}
 virtual ~Corp()
 {
  delete m_product;
 }

 virtual void process()
 {
  m_product->make();
  m_product->sell();
 }
private:
 Product *m_product;
};
class CorpA:public Corp
{
public:
 CorpA(Product * pro) :Corp(pro){}
 virtual ~CorpA(){}
 virtual void process()
 {
  cout<<"CorpA():process()"<<endl;
  Corp::process();
 }
};
class CorpB:public Corp
{
public:
 CorpB(Product * pro) :Corp(pro){}
 virtual ~CorpB(){}
 virtual void process()
 {
  cout<<"CorpB:process()"<<endl;
  Corp::process();
 }
};
int _tmain(int argc, _TCHAR* argv[])
{
 Product* product;
 product = new ProductA;
 Corp * corp ;
 corp = new CorpA(product);
 corp ->process();
 cout<<"----------"<<endl;
 product= new ProductB;
 corp = new CorpB(product);
 corp->process();
 return 0;
}

生产和厂家都是独立实现,充分给了自由。。。。
ok 今天就到这里。。。。继续学习

时间: 2025-01-19 18:52:23

用代码和UML图化解设计模式之桥接模式的深入分析_C 语言的相关文章

C#设计模式(8)——桥接模式(Bridge Pattern)

原文:C#设计模式(8)--桥接模式(Bridge Pattern) 一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是--把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类,具体设计类图如下: 这样的实现使得每部不同型号的电视都有自己遥控器实现,这样的设计对于电视机的改变可以很好地应对,只需要添加一个派生类就搞定了,但随着时间的推移,用户需要改变遥控器的功能,如:用户可能

乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例 有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象部分和实现部分分离. MessageModel using System;using System.Collections.Generic;us

【设计模式】—— 桥接模式Bridge

模式意图 这个模式使用的并不多,但是思想确实很普遍.就是要分离抽象部分与实现部分. 实现弱关联,即在运行时才产生依赖关系. 降低代码之间的耦合. 模式结构 Abstraction 抽象部分的基类,定义抽象部分的基础内容. RefinedAbstraction 抽象部分的扩充,用于对基类的内容补充,添加特定场景的业务操作. Implementor 实现部分的基类,定义实现部分的基本内容. ConcreteImplementor 具体的实现类.   应用场景 1 不希望在抽象和它的实现部分之间有一个

深入解析C++编程中对设计模式中的策略模式的运用_C 语言

策略模式也是一种非常常用的设计模式,而且也不复杂.下面我们就来看看这种模式. 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 角色:     抽象策略角色(Strategy): 抽象策略类.     具体策略角色(ConcreteStrategy):封装了继续相关的算法和行为.     环境角色(Context):持有一个策略类的引用,最终给客户端调用. UML图: 例子: #include <iostream>

C++设计模式之桥接模式_C 语言

问题描述 现在要去画一个图形,图形有长方形.圆形和扇形等等:而图形又可以加上不同的颜色,然后,我们就可以画出红色的长方形,绿色的长方形:红色的圆形,绿色的圆形等等.而这种图形的形状在变化,图形的颜色也在变化,当使用代码去实现时,如何面对这种多方面的变化呢?这就要说到今天的桥接模式了. 什么是桥接模式? 对于上述的图形与颜色的问题时,很多时候,我们让各个图形类继承颜色类,比如: 复制代码 代码如下: class CShape { }; class CRectangle : public CShap

详解C++设计模式编程中对状态模式的运用_C 语言

状态模式:当一个对象的内在状态发生变化时,允许改变其行为,这个对象看来像是改变了其类. 状态模式与策略模式的UML图几乎一模一样,下面列举了两者的不同: (1)可以通过环境类状态的个数来决定是使用策略模式还是状态模式. (2)策略模式的环境类自己选择一个具体策略类,具体策略类无须关心环境类:而状态模式的环境类由于外在因素需要放进一个具体状态中,以便通过其方法实现状态的切换,因此环境类和状态类之间存在一种双向的关联关系. (3)使用策略模式时,客户端需要知道所选的具体策略是哪一个,而使用状态模式时

实例解析C++设计模式编程中简单工厂模式的采用_C 语言

简单工厂模式中专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.它又称为静态工厂方法模式,属于类的创建型模式. 简单工厂模式的UML类图 简单工厂模式的程序通过封装继承来降低程序的耦合度,设计模式使得程序更加的灵活,易修该,易于复用. 简单工厂是在工厂类中做判断,从而创造相应的产品. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.   该模式中包含的角色及其职责   1.工厂(Creator)角色  

详解C++设计模式编程中责任链模式的应用_C 语言

职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 其思想很简单,比如考虑员工要求加薪.公司的管理者一共有三级,总经理.总监.经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监.总监的处理方式也一样,总经理可以处理所有请求.这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求.给出这个例子的UML图.

设计模式:桥接模式(Bridge)

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化. 意图:将抽象与实现解耦.  桥接模式主要应对的是由于实际的需要,某个类具有两个或者两个以上的维度变化(违反了SRP原则),如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿. 桥接模式所涉及的角色 1. Abstraction:定义抽象接口,拥有一个Implementor类型的对象引用 2. RefinedAbstraction:扩展Abstraction中的接口定义 3. Implementor:是具体实现的接口,Imple