java设计模式(精通系列)-Bridge模式
2017-10-11 09:32
246 查看
桥接模式:解耦作用。
设想如果要剑,锤子等武器,我们至少需要2个武器类,但是如果我们的武器需要附上不同的魔法,如飞行、噬魂等,此时至少有如下两种设计方案:
•第一种设计方案是为每一种武器都提供一套各种魔法的版本。
•第二种设计方案是根据实际需要对武器和魔法进行组合。
明显我们需要第二种
这样解耦的好处就是当这些武器需要其他功能时可以直接再添加新功能而不受原先魔法的限制。
设想如果要剑,锤子等武器,我们至少需要2个武器类,但是如果我们的武器需要附上不同的魔法,如飞行、噬魂等,此时至少有如下两种设计方案:
•第一种设计方案是为每一种武器都提供一套各种魔法的版本。
•第二种设计方案是根据实际需要对武器和魔法进行组合。
明显我们需要第二种
public class App { public static void main(String[] args) { System.out.println("骑士获得一把魔法剑"); Sword enchantedSword=new Sword(new SoulEatingEnchantment()); enchantedSword.wield(); enchantedSword.swing(); enchantedSword.unwield(); System.out.println("战士获得一把魔法锤"); Hammer hammer=new Hammer(new FlyingEnchantment()); hammer.wield(); hammer.swing(); hammer.unwield(); } }
public interface Enchantment { void onActivate(); void apply(); void onDeactivate(); }
这里写代码片public interface Weapon { void wield(); void swing(); void unwield(); Enchantment getEnchantment(); }
public class FlyingEnchantment implements Enchantment { @Override public void onActivate() { System.out.println("The item begins to glow faintly"); } 4000 @Override public void apply() { System.out.println("The item flies and strikes the enemies finally returning to owner's hand"); } @Override public void onDeactivate() { System.out.println("The item's glow fades"); } }
public class SoulEatingEnchantment implements Enchantment { @Override public void onActivate() { System.out.println("The item spreads bloodlust"); } @Override public void apply() { System.out.println("The item eats the soul of enemies"); } @Override public void onDeactivate() { System.out.println("Bloodlust slowly disappears."); } }
public class Hammer implements Weapon { private final Enchantment enchantment; public Hammer(Enchantment enchantment){ this.enchantment=enchantment; } @Override public void wield() { System.out.println("The hammer is wielded."); enchantment.onActivate(); } @Override public void swing() { System.out.println("The hammer is swinged"); enchantment.apply(); } @Override public void unwield() { System.out.println("the hammer is unwielded"); enchantment.onDeactivate(); } @Override public Enchantment getEnchantment() { return enchantment; } }
public class Sword implements Weapon { private final Enchantment enchantment; public Sword(Enchantment enchantment){ this.enchantment=enchantment; } @Override public void wield() { System.out.println("The sword is wielded"); enchantment.onActivate(); } @Override public void swing() { System.out.println("The sword is swinged"); enchantment.apply(); } @Override public void unwield() { System.out.println("The sword is unwielded"); enchantment.onDeactivate(); } @Override public Enchantment getEnchantment() { return enchantment; } }
这样解耦的好处就是当这些武器需要其他功能时可以直接再添加新功能而不受原先魔法的限制。
相关文章推荐
- java设计模式(精通系列)-proxy
- java设计模式(精通系列)-Adapter模式
- java设计模式(精通系列)-Decorator
- java设计模式(精通系列)-策略模式(Strategy)
- java设计模式(精通系列)-基础uml概念
- java设计模式(精通系列)-Builder模式
- java设计模式(精通系列)-factory
- java设计模式(精通系列)-command
- 设计模式探索系列之Bridge模式
- Java设计模式 - Bridge(桥接模式)
- Java设计模式-----Bridge桥接模式
- 用Java实现的设计模式系列(2)-Prototype
- java bridge设计模式
- java 设计模式学习笔记十 bridge桥模式
- java 设计模式之桥接模式Bridge
- 极速理解设计模式系列:7.桥接模式(Bridge Pattern)
- Java设计模式二十一:桥模式(Bridge Pattern)
- JAVA设计模式系列之Adapter(适配器)-Java基础-Java-编程开发
- java bridge设计模式
- Java设计模式(三)Adapter(适配器),Bridge(桥接)