标签: bridge

桥模式示例

我花了一些时间在维基百科的这个Bridge模式示例中,但是,我仍然不明白这个桥模式试图解释什么.

interface DrawingAPI {
    public void drawCircle(double x, double y, double radius);
}

/** "ConcreteImplementor" 1/2 */
class DrawingAPI1 implements DrawingAPI {
   public void drawCircle(double x, double y, double radius) {
        System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius);
   }
}

/** "ConcreteImplementor" 2/2 */
class DrawingAPI2 implements DrawingAPI {
   public void drawCircle(double x, double y, double radius) {
        System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius);
   }
}

/** "Abstraction" */
interface Shape {
   public void draw(); …

java design-patterns bridge

5
推荐指数
1
解决办法
5539
查看次数

桥模式 - Java编译的好处?

设计模式 - 可重用面向对象软件的元素书中说:

在只有一个实现(一对一)的情况下,创建一个抽象的实现者类是没有必要的.这是桥模式的退化情况; Abstraction和Implementor之间存在一对一的关系.然而,当类的实现中的更改不得影响其现有客户端时,这种分离仍然有用 - 即它们不应该被重新编译,只需重新链接.

我对编译时间的好处表示怀疑,因为我无法想象Java中的一个案例,即实现中的更改会重新编译其超类(在本例中为abstract).

例如,如果我们有X扩展Y并且客户端执行:

Y y = new X();  
Run Code Online (Sandbox Code Playgroud)

X中的更改并不意味着重新编译Y(当然,如果我们不想更改X的方法签名)

使用Bridge Pattern时完全相同:

YAbstraction yabstraction = new YRefinedAbstraction(new XImplementor());
Run Code Online (Sandbox Code Playgroud)

XImplementor中的更改并不意味着重新编译YAbstraction.

因此,根据我的说法,这种好处不会发生在Java中,并且需要一对一=>无桥模式.

也许子类强制超类的更改要在其他语言中重新编译?喜欢SmallTalk和C++?

你有什么看法?

java design-patterns bridge compilation

5
推荐指数
1
解决办法
544
查看次数

纠正桥梁模式的未定

我正确地看不到桥模式:

之前:

  public class Main2 {
            @SuppressWarnings("unused")
            public static void main(String[] args) {
                Car car11 = new BadNativeCar();
                Car car12 = new GoodNativeCar();
                Car car21 = new BadForeignCar();
                Car car22 = new GoodForeignCar();
            }
        }

        interface Car{
            public void drive();
            public void stop();
        }

        class NativeCar implements Car{
            @Override
            public void drive() {
            }
            @Override
            public void stop() {
            }
        }

        class ForeignCar implements Car{
            @Override
            public void drive() {
            }
            @Override
            public void stop() {
            }
        }

        class GoodNativeCar …
Run Code Online (Sandbox Code Playgroud)

design-patterns bridge

5
推荐指数
1
解决办法
592
查看次数

如何强制 symfony 的 phpunit 桥使用 phpunit 6.5 而不是 5.7?

问题

我使用Symfony 3.3.10PHP 7.0.25-0ubuntu0.16.04.1

默认情况下,此组合与phpunit 5.x.

但我想用力phpunit 6.x

语境

当我vendor/bin/simple-phpunit第一次调用时,它会按照此处的源代码中的说明安装phpunit/phpunit版本5.7.*

https://github.com/symfony/phpunit-bridge/blob/v3.4.11/bin/simple-phpunit

第 18-27 行:

if (PHP_VERSION_ID >= 70200) {
    // PHPUnit 6 is required for PHP 7.2+
    $PHPUNIT_VERSION = getenv('SYMFONY_PHPUNIT_VERSION') ?: '6.5';
} elseif (PHP_VERSION_ID >= 50600) {
    // PHPUnit 4 does not support PHP 7
    $PHPUNIT_VERSION = getenv('SYMFONY_PHPUNIT_VERSION') ?: '5.7';
} else {
    // PHPUnit 5.1 requires PHP 5.6+
    $PHPUNIT_VERSION = '4.8';
}
Run Code Online (Sandbox Code Playgroud)

因为我的 PHP 版本是 …

phpunit bridge version symfony composer-php

5
推荐指数
1
解决办法
1490
查看次数

最小化图中的桥数

我试图解决一个基本上减少的问题:
给出一组N个节点,编号从1到N和M个边缘,其中N <10000M <100000,
找到边缘(u,v),当添加到图形时- 最小化图表中的桥梁数量.
如果有许多这样的边缘 - 打印具有最低字典值的那个边缘.
什么是解决这个问题的有效方法?

c++ java algorithm bridge graph

4
推荐指数
1
解决办法
224
查看次数

Javascript桥接/上传到JavaFX(通过JSObject.setMember()方法)在分发时中断

问题

我花了几个小时试图确定我的分布式代码失败的原因,但是在使用IDE(NetBeans)调试时我的源代码没有问题.我找到了一个解决方案,并发帖帮助其他可能有类似问题的人.顺便说一句:我是一个自学成才的程序员,可能会缺少一些基本概念 - 随时教育我.

背景资料

在JavaFX应用程序中使用WebView控件我从html文件加载网页.我想使用JavaScript来处理HTML方面,但我还需要在Java和JavaScript之间自由传递信息(两个方向).非常适合使用WebEngine.executeScript()方法进行Java启动的传输,并使用Java中的JSObject.setMember()为JavaScript启动向Java传输信息的方法.

设置链接(这种方式稍后会破坏):

/*Simple example class that gives method for 
JavaScript to send text to Java debugger console*/
public static class JavaLink {
    public void showMsg(String msg) {
        System.out.println(msg);
    }
}

...

/*This can be added in the initialize() method of  
the FXML controller with a reference to the WebEngine*/
public void initialize(URL url, ResourceBundle rb) {
    webE = webView.getEngine();

    //Retrieve a reference to the JavaScript window object
    JSObject jsObj = (JSObject)webE.executeScript("window");
    jsObj.setMember("javaLink", new JavaLink());
    /*Now …
Run Code Online (Sandbox Code Playgroud)

javascript bridge javafx jar jsobject

4
推荐指数
1
解决办法
1033
查看次数

创建后如何更改docker的IP地址?

我有一个 docker 链接到一个具有 IP 地址的网桥192.168.150.1/24。一旦我从 docker 映像创建了 docker 实例,它就会获得一个 IP 地址,192.168.150.2但根据我的要求192.168.150.2,必须保留这个 IP 地址,因为我想将它用于其他用途。

现在,我想将此 docker 实例的 IP 地址更改为192.168.150.3. 有可能吗?如果是这样怎么办?请帮忙。

ip networking bridge docker

4
推荐指数
1
解决办法
6873
查看次数

KVM、OVS、桥接网络。如何配置?

我对 KVM 和桥接完全陌生,需要你的帮助。我有一个带有 QEMU/KVM 的远程服务器,并且只能使用 SSH 连接。主机操作系统是 RHEL 7。来宾必须连接到网桥(ovs),他们可以看到对方并且无法访问外部网络。主机必须能够对访客执行 ping 操作。不得使用物理 NIC 接口,因为我可能会失去连接。所以这就像主机看到访客的每个虚拟接口并可以访问它们,并且访客通过桥接器看到彼此。我使用 libvirt 尝试按照How to Use Open vSwitch with Libvirt 的说明来配置它。请帮帮我。

首先我需要的是创建桥梁:

sudo ovs-vsctl add-br ovsbr
Run Code Online (Sandbox Code Playgroud)

然后我使用 virsh 配置域 XML 文件,如下所示:

  <interface type='bridge'>
    <mac address='52:54:00:71:b1:b6'/>
    <source bridge='ovsbr'/>
    <virtualport type='openvswitch'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  </interface>
Run Code Online (Sandbox Code Playgroud)

重新启动后,域桥已连接 vnet0 接口,该接口是来宾接口。在这种情况下如何提供寻址?我可以通过主机向访客提供静态地址吗?

bridge kvm libvirt

3
推荐指数
1
解决办法
1万
查看次数

将 std::string 转换为 Swift 字符串

精简版:

如何将std::string(使用桥接从 .Swift 文件调用的 .cpp 函数返回的对象)转换为 Swift String

长版:

我有一个用 C++ 编写的库,我必须使用 Swift 调用一些代码。我创建了一个桥,在我的 Xcode 项目中添加了两个文件:

一个桥接头,它允许 Swift 调用 C 函数(afaik Swift 不能直接调用 C++ 函数,所以它需要通过 C 函数)

//file bridgingHeader.h
const char * getLastOpenedFile();
Run Code Online (Sandbox Code Playgroud)

和一个 .cpp 文件,它可以在内部调用(当然)C++ 函数,并且可以用 extern "C" 定义 C 函数

//file wrapper.cpp    
#include <string>
#include "my_library.hpp"

extern "C" const char * getStringFromLibrary()
{
    const char * s = get_string_from_library().c_str();
    return s;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用 .swift 文件访问返回值

let myString = String(cString: getStringFromLibrary())
Swift.print(myString)
Run Code Online (Sandbox Code Playgroud)

放置断点检查s函数内部的值getStringFromLibrary() …

c++ bridge static-libraries swift

3
推荐指数
1
解决办法
1593
查看次数

在 docker-compose.yml 中设置桥名称

我正在运行一个启用了“userns-remap”的dockerized GitLab 实例,并且我想在主机上使用共享的 PostgreSQL。然而,当我 docker-compose up 时创建的桥在每次运行时都会获得一个新的随机名称“br-xxxxxxxxxxxx”。

这通常不会成为问题,但主机上的 Vuurmuur 防火墙默认会阻止从容器到主机的所有流量,并且我需要网桥名称才能在 Vuurmuur 上设置允许规则。

我发现了一些相关的主题,例如com.docker.network.bridge.name,但我很难将它们放在一起。到目前为止,我试图找到一种方法来确保每次容器升级时,网桥都会分配相同的名称和相同的 IP/掩码。这是否可能,docker-compose.yml或者这种方法是完全错误的吗?

docker-compose.yml到目前为止,这是不引人注目的:

version: '3.8'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        gitlab_rails['db_adapter'] = 'postgresql'
        gitlab_rails['db_host'] = '172.18.0.1'
        (...)
    ports:
      - '8080:80'
    volumes:
      (...)
Run Code Online (Sandbox Code Playgroud)

感谢您的任何提示!

bridge docker docker-compose

3
推荐指数
1
解决办法
4871
查看次数