Java设计模式全集-桥接模式(Bridge)

桥接模式(Bridge)

将抽象部分与具体实现分开,通过聚合的方式代替继承,防止因为类不断继承产生类爆炸
比如手机有很多品牌,手机还可以安装游戏,游戏又有不同的开发厂商,将游戏进行抽象,聚合到手机类中,可以通过安装游戏的方法,将不同的游戏对象装入手机对象中,获得不同的对象结果
整体上与抽象工厂非常相似,但侧重点不同,抽象工厂侧重于对于一组产品的集中式扩展,而桥接模式是为了防止类的继承爆炸,是为了解决继承带来的强耦合而提出的设计模式

UML

Java设计模式全集-桥接模式(Bridge)_第1张图片

  • 手机定义
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/6 23:47
 */
public abstract class Phone {

    private List<Game> games = new ArrayList<>();

    protected abstract String getName ();

    public void installGame (Game game) {
        System.out.println("正在安装" + game.getName());
        games.add(game);
    }
}
  • IPHONE
public class IPhone extends Phone {

    @Override
    protected String getName () {
        return "iphone";
    }
}
  • 大华为
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/6 23:50
 */
public class Huawei extends Phone {

    @Override
    protected String getName () {
        return "华为手机";
    }
}
  • 游戏定义
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/6 23:48
 */
public abstract class Game {

    protected abstract String getName ();
}
  • 王者农药
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/6 23:49
 */
public class WangZheRongYao extends Game {

    @Override
    protected String getName () {
        return "王者荣耀";
    }
}
  • 阴阳师
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/6 23:49
 */
public class YinYangShi extends Game {

    @Override
    protected String getName () {
        return "阴阳师";
    }
}
  • 测试
/**
 * @author Xiaoyingge
 * @description
 * @date 2020/5/6 23:52
 */
public class Main {

    public static void main (String[] args) {
        Phone myPhone = new Huawei();
        myPhone.installGame(new WangZheRongYao());
        myPhone.installGame(new YinYangShi());
    }

}

你可能感兴趣的:(#,设计模式)