Bridge概述
不基于桥接模式的实现
不基于桥接模式的目标接口
IRole
package online.javabook.gof.structural.patterns2.bridge.game.role.api.bad;
public interface IRole {
public void fire();
}
不基于桥接模式的目标实现
类型数量随着对象行为的叠加向水平方向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());
}
}