Bridge概述

Bridge - 图1

不基于桥接模式的实现

不基于桥接模式的目标接口

IRole

  1. package online.javabook.gof.structural.patterns2.bridge.game.role.api.bad;
  2. public interface IRole {
  3. public void fire();
  4. }

不基于桥接模式的目标实现

类型数量随着对象行为的叠加向水平方向N*M的扩张

Role1WithGun

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role1WithGun implements IRole {

    @Override
    public void fire() {
        System.out.println("Role1 is shooting");
    }
}

Role1WithKnife

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role1WithKnife implements IRole {

    @Override
    public void fire() {
        System.out.println("Role1 is cutting");
    }
}

Role1WithMagic

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role1WithMagic implements IRole {

    @Override
    public void fire() {
        System.out.println("Role1 is making magic");
    }
}

Role2WithGun

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role2WithGun implements IRole {

    @Override
    public void fire() {
        System.out.println("Role2 is shooting");
    }
}

Role2WithKnife

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role2WithKnife implements IRole {

    @Override
    public void fire() {
        System.out.println("Role2 is cutting");
    }
}

Role2WithMagic

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role2WithMagic implements IRole {

    @Override
    public void fire() {
        System.out.println("Role2 is making magic");
    }
}

Role3WithGun

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role3WithGun implements IRole {

    @Override
    public void fire() {
        System.out.println("Role3 is shooting");
    }
}

Role3WithKnife

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role3WithKnife implements IRole {

    @Override
    public void fire() {
        System.out.println("Role3 is cutting");
    }
}

Role3WithMagic

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role3WithMagic implements IRole {

    @Override
    public void fire() {
        System.out.println("Role3 is making magic");
    }
}

Role4WithGun

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role4WithGun implements IRole {

    @Override
    public void fire() {
        System.out.println("Role4 is shooting");
    }
}

Role4WithKnife

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role4WithKnife implements IRole {

    @Override
    public void fire() {
        System.out.println("Role4 is cutting");
    }
}

Role4WithMagic

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;

public class Role4WithMagic implements IRole {

    @Override
    public void fire() {
        System.out.println("Role4 is making magic");
    }
}

不基于桥接模式的目标对象访问

Main

package online.javabook.gof.structural.patterns2.bridge.game.app.bad;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.bad.IRole;
import online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad.Role1WithGun;
import online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad.Role1WithKnife;
import online.javabook.gof.structural.patterns2.bridge.game.role.impl.bad.Role2WithMagic;

public class Main {

    public static void main(String[] args) {
        IRole role1WithGun = new Role1WithGun();
        role1WithGun.fire();

        IRole role1WithKnife = new Role1WithKnife();
        role1WithKnife.fire();

        IRole role2WithMagic = new Role2WithMagic();
        role2WithMagic.fire();
    }
}

Console

Role1 is shooting
Role1 is cutting
Role2 is making magic

基于桥接模式的实现

类型数量随着对象行为的拆分降级为N+M的扩张

基于桥接模式的目标接口拆分

角色

Role(角色接口)

package online.javabook.gof.structural.patterns2.bridge.game.role.api.good;

public interface IRole {

    public void fire(IArms arms);
}

Role1

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.good;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IArms;
import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IRole;

public class Role1 implements IRole {

    @Override
    public void fire(IArms arms) {
        arms.fire();
    }
}

Role2

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.good;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IArms;
import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IRole;

public class Role2 implements IRole {

    @Override
    public void fire(IArms arms) {
        arms.fire();
    }
}

Role3

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.good;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IArms;
import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IRole;

public class Role3 implements IRole {

    @Override
    public void fire(IArms arms) {
        arms.fire();
    }
}

Role4

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.good;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IArms;
import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IRole;

public class Role4 implements IRole {

    @Override
    public void fire(IArms arms) {
        arms.fire();
    }
}

行为

Arms(武器接口)

package online.javabook.gof.structural.patterns2.bridge.game.role.api.good;

public interface IArms {

    public void fire();
}

Gun

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.good;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IArms;

public class Gun implements IArms {

    @Override
    public void fire() {
        System.out.println("shooting");
    }
}

Knife

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.good;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IArms;

public class Knife implements IArms {

    @Override
    public void fire() {
        System.out.println("catting");
    }
}

Magic

package online.javabook.gof.structural.patterns2.bridge.game.role.impl.good;

import online.javabook.gof.structural.patterns2.bridge.game.role.api.good.IArms;

public class Magic implements IArms {

    @Override
    public void fire() {
        System.out.println("magic");
    }
}

基于桥接模式的目标对象访问

Main

package org.gof.structural.patterns2.bridge.game.app.good;

import org.gof.structural.patterns2.bridge.game.role.api.good.IRole;
import org.gof.structural.patterns2.bridge.game.role.impl.good.*;

public class Main {
    public static void main(String[] args) {
        IRole role1 = new Role1();
        role1.fire(new Gun());
        role1.fire(new Knife());
        role1.fire(new Magic());

        IRole role2 = new Role2();
        role2.fire(new Gun());
        role2.fire(new Knife());
        role2.fire(new Magic());

        IRole role3 = new Role3();
        role3.fire(new Gun());
        role3.fire(new Knife());
        role3.fire(new Magic());

        IRole role4 = new Role4();
        role4.fire(new Gun());
        role4.fire(new Knife());
        role4.fire(new Magic());
    }
}