/**
语义:实现系统可能有多个维度的分类,每一种分类都可能变化,那么就把这种多角度分离出来让他们独立变化,减少他们之间的耦合
* 按性质划分,按类型划分----两个维度的划分
* 所以说这两个维度会有排列组合---怎么构建子类是个问题,必须避免类爆炸
* 先看传统方法
不用桥接模式的坏处: 如果使用继承,那么子类和父类是紧耦合的,当你需要复用子类时,如果继承下来的实现不合适解决新问题,则父类必须重写或被其他更合适的类替换,这种依赖关系限制了灵活性并最终限制了复用性。
怎么办呢? 优先使用合成/聚合复用原则。。。。
比如:手机是不同的品牌公司,各自做自己的软件,就像继承结构的设计一样,而PC却是硬件厂商做硬件,软件厂商做软件,组合起来才是可用的机器。。是的。。组合。。。当类的划分太多了,我们就做小粒度的东西,然后再组合起来形成千变万化的产品
*/
例子1:
手机可以这样分类:
手机品牌
-----手机品牌M
-------手机品牌M通讯录
-------手机品牌M游戏
-----手机品牌N
------手机品牌N通讯录
------手机品牌N游戏
也可以这样分类:
手机软件
------通讯录
------手机品牌N通讯录
-------手机品牌M通讯录
------游戏
-------手机品牌M游戏
------手机品牌N游戏
但是从面向对象的观点来看,他们明显是继承关系。。。没错。。是父子的关系哈。。因为从树形的结构上就可以看出来嘛。。。。。,继承可以把多维度全部表现出来
我们从细粒度的方式来考虑:
我们的分类无非有两种, 第一按照品牌分类,第二按照功能分类
手机品牌
-----手机品牌N
-----手机品牌M
手机软件
-----通讯录
-----游戏
这里只能按照一个维度表现出来,不能按照多维度表现出来。。。所以是细粒度的。。我们只关注一个维度。。。然后组合成多个维度
剩下一个问题:怎么组合(这里的组合其实是面向对象术语上的聚合。。。)
从语文角度来考虑。。。
手机品牌N的通讯录 通讯录的手机品牌N 哪个能读通呢?
当然是 手机品牌N的通讯录。。。那么手机品牌包含通讯录,他们是聚合关系(软件并不是品牌的一部分)
---------------------------忧郁的分割线-----------------------------------------------------
例子2:
public class Gift {
}
//第一个维度:
public class Flower extends Gift {
}
public class Ring extends Gift {
}
//第二个维度
public class WarnGift extends Gift {
}
public class WildGift extends Gift {
}
public class Gift {
protected GiftImpl g; //只允许子类用啦,所以用protected
//其实写Gift g;也一样,反正是设置一个插头的接受者,就是那个铜片片
//不过如果具体的和抽象的有区别的话,用GiftImpl可以继承下来更多的东西
}
public class WarnGift extends Gift {
//这个是抽象的维度,当然需要扩展所以他得是一个插座
public WarnGift(GiftImpl g){
this.g = g;
}
}
/*
所以温暖的花 GiftImpl g = new Flower();
WarnGift wg = new WarnGift(g);//温暖的花就有了哦
*/
分享到:
相关推荐
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
在Java这样的静态类型语言中,通常不直接支持鸭子类型,但可以通过某些设计模式或库来模拟这种行为,提高代码的灵活性和可扩展性。 【标签】"开源项目" 指出这两个压缩包文件都是开源的,这意味着它们的源代码可以...
AXI Bridge for PCI Express Gen3 Subsystem是一款专为FPGA设计的IP核,它提供了连接PCI Express(PCIe)Gen3接口与系统内部高级可扩展接口(AXI)总线的桥梁。该产品指南(PG194 v3.0)详细介绍了这款IP核的功能、...
### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...
**桥梁模式(Bridge)**是一种结构型设计模式,它的主要目的是将抽象部分与其实现部分解耦,使得它们可以独立地进行变化。在C++编程中,这种模式尤其有用,因为它允许我们创建灵活且可扩展的系统,同时保持代码的低...
`axi-ahb-apb-bridge.rar`这个压缩包文件包含了关于这三种总线协议间转换接口的Verilog语言实现,这对于理解和设计SoC中的总线互连至关重要。 1. **AXI总线**:AXI是由ARM公司提出的高性能、高带宽的总线接口标准,...
### Java常用设计模式—追美眉技术详解 #### 设计模式概述 设计模式是一种软件设计中的通用解决方案,它描述了一类问题以及解决该问题的方法。通过应用这些模式,开发人员可以编写出更易于理解、扩展和维护的代码...
桥梁模式是一种结构型设计模式,它将抽象部分与实现部分分离,使得它们可以独立地进行变化。这种模式的主要目的是为了将抽象化和实现化解耦,使得两者可以独立发展,增加了系统的灵活性。在实际开发中,当一个类有多...
根据提供的文档概览,我们可以对每个章节所涉及的设计模式进行详细的阐述和解释。下面将针对文档中提及的设计模式逐一展开,以便更好地理解这些模式的概念、结构、应用场景以及优缺点。 ### 1. 面向对象程序设计...
桥模式是一种设计模式,主要目的是将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在"桥模式(Qt平台)"中,我们将会看到如何在Qt框架下应用这个模式来增强软件的可扩展性和灵活性。Qt是一个流行的开源跨...
桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在C++编程中,桥接模式能够帮助我们设计出更灵活、可扩展的系统,允许我们在不修改原有代码的基础上更换或增加新的实现...
"设计模式1-创建型模式" 设计模式是软件设计中的一种解决方案,它提供了一种通用的设计方案,解决了面相对象系统中重复出现的设计问题。设计模式的学习和运用对软件系统开发有着非常重要的意义,它可以帮助开发者更...
桥梁模式(Bridge Pattern)是设计模式中的一种结构型模式,它的核心思想是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在这个主题中,我们将深入探讨桥梁模式的原理、结构以及如何在Java中实现。 首先...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。这些模式在不同的场景下被反复验证并被广泛接受,为开发者提供了一种标准的、可复用的解决方案。在这个“设计模式之美”的学习笔记...
在Laravel框架中,"application bridge"是一种设计模式,它允许开发者将不同组件或服务连接起来,以便更好地管理和协调应用程序的各个部分。标题中的"Laravel开发-application-bridge-slim"暗示我们将讨论一个针对...
"设计模式精解-GOF23种设计模式解析" 设计模式是软件开发中的一种解决方案,旨在提供通用的、可重用的解决方案来解决软件设计中常见的问题。其中,GOF23种设计模式是软件设计模式中最经典和最重要的23种设计模式。...
"设计模式" 在软件开发中,设计模式是一种解决特定问题的通用方法。它可以帮助开发者编写更加灵活、可维护、可扩展的代码。本书《您的设计模式》对设计模式进行了详细的讲解,涵盖了策略模式、代理模式、单例模式、...
本资料主要探讨了Docker的网络桥接模式(Bridge模式)以及其默认网络设备docker0,这对于理解和运用Docker服务至关重要。 首先,Docker的Bridge模式是Docker容器默认的网络模式。在这个模式下,每个容器都会被分配...