桥接模式

《一天一模式》— 桥接模式

孤者浪人 提交于 2020-04-06 18:14:05
一、桥接模式的概念 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体[Handle and Body]模式或接口[Interfce]模式。 听懂了这句话就不用往下看了,说明你会了。 听不懂我觉得也正常,如果用一句话能学会就没人看书了。像我这种笨人,都是学会了一个模式,然后往它的定义上套。 二、什么时候使用桥接模式 上面的概念中说到, 抽象部分与它的实现(功能)部分分离,使它们都可以独立地变化。看下面这句话: 类的层级结构 只有一层, 功能层次结构 与 实现层级结构 是混杂在一个层级结构中时,你可以使用桥接模式。 —— 《图解设计模式》 在说之前先说三个概念: 层的层级结构层数 功能层次结构 实现层级结构 可能名词比较陌生,我刚看的时候觉得好高大上啊, 没听过的技术名词都觉得高大上。 但这三个名词用白话来描述就 特别简单。 2.1类的层级结构的层数 用一句话就能说明白。 类的层级结构就是类与子类之间的继承的层数。 这个图中类的层级结构的层数是:1 这个图中类的层级结构的层数是:2 类的层级结构的层数不能太深。 2.2 功能层次结构 类的功能层次结构,用一句话说不完,得两句话。 首先两个类有继承关系。 父类具有一些基本功能,在子类中添加了新的功能,这就叫功能层次结构。 还是不太好理解,我当时是这么理解的,子类继承了父类的方法之外

通过桥接虚拟网卡使VMWare和宿主机实现双向通讯

烂漫一生 提交于 2020-04-01 14:30:59
0.为什么选择虚拟网卡和桥接模式 首先虚拟机网络设置为NAT,虚拟机实现上网是很方便的,但是宿主机访问虚拟机就比较麻烦了(需要单独配置端口转发),桥接就能很好的解决这个问题,桥接模式会把虚拟机当做宿主机所在的网络环境中的一台真实主机。 为啥要用虚拟网卡?这个纯属我的网络环境的问题,我所在的网络环境ip跟mac是绑定的,虚拟机的mac预先是没有绑定的,因此如果直接桥接宿主机的物理网卡是不能获取有效的ip地址的,既不能上网,也不能跟宿主机互通,因此为了实现能跟宿主机互通只能用虚拟网卡了。 1.添加Loopback虚拟网卡 在“计算机”右击,选择“管理”,在“计算机管理”中选择“设备管理器”,在右侧的计算机图标中右击,“添加过时硬件”,如下图所示: 在接下来的向导中选择“下一步”,选择手动添加硬件设备,如下图所示: 在接下来的设备类型中选择“网络适配器”,如下图所示: 接下来,选择设备厂商为“Microsoft”,网络适配器为“Microsoft Loopback Adapter”如下图所示: 继续下一步,直到完成安装即可。 2.配置虚拟网卡的IP 在“控制面板”,找到“网络和共享中心”,从左侧面板中选择“更改适配器设置”,找到新添加的Loopback网卡,右击选择“属性”如下图所示: 参考下图进行网络配置,如果你的网络环境刚好也是192.168.1.XXX网段的,那么可以换个别的ip

如何向妻子解释设计模式

≡放荡痞女 提交于 2020-03-26 10:25:32
简介   自上篇翻译< 如何向妻子解释OOD >后收到了很好的反应。故特继续翻译作者的< How I explained Design Patterns to my wife: Part 1 >一文,以飨读者。在此文中,作者依旧通过与妻子浅显易懂的对话,向读者解释了什么是设计模式。 设计模式是什么? Shubho :通过我们关于面向对象设计原则(OODP,即SOLID原则)的对话,我想你已经对面向对象设计原则(OODP)有了基本的认识。希望你不要介意我把对话分享到博客上。你可以在这找到它: < 如何向妻子解释OOD >. 设计模式是这些原则在某些特定公共场景下标准化的应用,接下来让我们通过一些例子学习什么是设计模式。 Farhana : 当然,我喜欢例子。 Shubho : 让我们以汽车为例讨论一下。汽车是一个很复杂的对象,由成千上万的其它对象组成,如发动机,车轮,方向盘,车座,车体等等其他不同的部分或部件。 汽车部件 当装配汽车时,制造商需要集中并装配这些更小的自成汽车子系统的不同部件。而这些不同的小部件同样也是复杂的对象,其它制造商同样要生产并组装它 们。在生产汽车时,汽车公司并不会为怎么生产组装这些部件操心(前提是他们要确保这些对象/设备的质量)。当然,汽车制造商更加关心怎么装配这些不同部件 以便能生产不同型号的汽车。 通过遵循不同的设计,组装不同的部件,生产不同型号的汽车

Java设计模式之桥接设计模式

雨燕双飞 提交于 2020-03-25 08:58:06
3 月,跳不动了?>>> 概念 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。大白话的意思是大家在工作中,controller,service,dao这三层互相依赖完全解偶,同理这个设计模式就是让抽象类与接口完全独立出来。 场景 1、由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是使用继承将无法实现这种需要,或者使得设计变得相当臃肿 2、 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。 3、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。 代码实现 public interface DrawCircle { void drawCircle(int radius, int x, int y); } public class DrawCircleBlank implements DrawCircle { @Override public void drawCircle(int radius, int x, int y) { System.out.println("半径:"+radius+"x:"+x+"y:"+y); } } public class DrawCircleRed implements

《JAVA设计模式》之桥接模式(Bridge)

我只是一个虾纸丫 提交于 2020-03-21 10:54:12
桥梁模式的用意    桥梁模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。   桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。这句话很短,但是第一次读到这句话的人很可能都会思考良久而不解其意。   这句话有三个关键词,也就是抽象化、实现化和脱耦。理解这三个词所代表的概念是理解桥梁模式用意的关键。    实现化   抽象化给出的具体实现,就是实现化。   一个类的实例就是这个类的实例化,一个具体子类是它的抽象超类的实例化。    脱耦   所谓耦合,就是两个实体的行为的某种强关联。而将它们的强关联去掉,就是耦合的解脱,或称脱耦。在这里,脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。   所谓强关联,就是在编译时期已经确定的,无法在运行时期动态改变的关联;所谓弱关联,就是可以动态地确定并且可以在运行时期动态地改变的关联。显然,在Java语言中,继承关系是强关联,而聚合关系是弱关联。   将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联。因此,桥梁模式中的所谓脱耦

vmware 虚拟机三种网卡

﹥>﹥吖頭↗ 提交于 2020-03-17 16:12:24
转:https://blog.csdn.net/lyf_ldh/article/details/78695357 vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那么这些都是有什么作用呢?其实,我们现在看到的VMnet0表示的是用于桥接模式下的虚拟交换机;VMnet1表示的是用于仅主机模式下的虚拟交换机;VMnet8表示的是用于NAT模式下的虚拟交换机。 同时,在主机上对应的有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两块虚拟网卡,它们分别作用于仅主机模式与NAT模式下。在“网络连接”中我们可以看到这两块虚拟网卡,如果将这两块卸载了,可以在vmware的“编辑”下的“虚拟网络编辑器”中点击“还原默认设置”,可重新将虚拟网卡还原。 小伙伴看到这里,肯定有疑问,为什么在真机上没有VMware Network Adapter VMnet0虚拟网卡呢?那么接下来,我们就一起来看一下这是为什么。 一、Bridged(桥接模式) 什么是桥接模式

Vmware虚拟机三种网络模式详解

↘锁芯ラ 提交于 2020-03-17 15:14:23
转载自: https://www.cnblogs.com/linjiaxin/p/6476480.html 若有侵权,请告知本人进行处理。 由于 Linux 目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有vmware workstations和virtual box等。在使用虚拟机软件的时候,很多初学者都会遇到很多问题,而vmware的网络连接问题是大家遇到最多问题之一。在学习交流群里面,几乎每天都会有同学问到这些问题,写这篇详解也是因为群里童鞋网络出故障,然后在帮他解决的过程中,对自己的理解也做一个总结。接下来,我们就一起来探讨一下关于vmware workstations网络连接的三种模式。 vmware为我们提供了三种网络工作模式,它们分别是: Bridged(桥接模式) 、 NAT(网络地址转换模式) 、 Host-Only(仅主机模式) 。 打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那么这些都是有什么作用呢?其实,我们现在看到的VMnet0表示的是用于桥接模式下的虚拟交换机;VMnet1表示的是用于仅主机模式下的虚拟交换机

vmware虚拟机三种网络模式详解

雨燕双飞 提交于 2020-03-17 15:13:44
由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有vmware workstations和virtual box等。在使用虚拟机软件的时候,很多初学者都会遇到很多问题,而vmware的网络连接问题是大家遇到最多问题之一。在学习交流群里面,几乎每天都会有同学问到这些问题,写这篇详解也是因为群里童鞋网络出故障,然后在帮他解决的过程中,对自己的理解也做一个总结。接下来,我们就一起来探讨一下关于vmware workstations网络连接的三种模式。 vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那么这些都是有什么作用呢?其实,我们现在看到的VMnet0表示的是用于桥接模式下的虚拟交换机;VMnet1表示的是用于仅主机模式下的虚拟交换机;VMnet8表示的是用于NAT模式下的虚拟交换机。 同时,在主机上对应的有VMware Network Adapter VMnet1和VMware Network Adapter

设计模式 Vs实践-4 桥接模式

烈酒焚心 提交于 2020-03-17 13:07:46
上一篇使用的装饰者模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 如果将上一篇的装饰者模式改为桥接模式的话,代码修改如下 (如理解的不对请指点) class Person { private string name; public Person() { } public Person(string name) { this.name = name; } public virtual void Show() { Console.WriteLine("装扮的{0}",name); } } abstract class Finery { protected Person person; public abstract void Show(); } class TShirts : Finery { public TShirts(Person person) { this.person = person; } public override void Show() { Console.Write("TShirts "); } } class Program { static void Main(string[] args) { Person person = new

Java常用日志框架介绍

一世执手 提交于 2020-03-16 04:06:16
转载自 Java常用日志框架介绍 java日志概述 对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,基于日志的业务逻辑统计分析等都离不日志。java领域存在多种日志框架,目前常用的日志框架包括Log4j,Log4j 2,Commons Logging,Slf4j,Logback,Jul。 java常用日志框架类别介绍 Log4j Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目。 Log4j是几种Java日志框架之一。 Log4j 2 Apache Log4j 2是apache开发的一款Log4j的升级产品。 Commons Logging Apache基金会所属的项目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名为Commons Logging。 Slf4j 类似于Commons Logging,是一套简易Java日志门面,本身并无日志的实现。(Simple Logging Facade for Java,缩写Slf4j)。 Logback 一套日志组件的实现(slf4j阵营)。 Jul (Java Util Logging),自Java1.4以来的官方日志实现。 看了上面的介绍是否会觉得比较混乱,这些日志框架之间有什么异同,都是由谁在维护?