我尝试阅读了许多有关dofactory、维基百科和其他网站的文章,但我仍然不知道桥接模式和策略模式之间的区别。
我知道它们都将抽象与其实现分离,并可以在运行时更改实现。但是我仍然不知道在哪种情况下应该使用策略模式,在哪种情况下应该使用桥接模式。
我知道它们都将抽象与其实现分离,并可以在运行时更改实现。但是我仍然不知道在哪种情况下应该使用策略模式,在哪种情况下应该使用桥接模式。
从策略模式的维基百科中得知
策略模式的UML类图与桥接模式相同。但是,这两种设计模式的意图不同。虽然策略模式适用于行为,但桥接模式适用于结构。
在策略模式中,上下文和策略之间的耦合比桥接模式中抽象和实现之间的耦合更紧密。
对于策略模式,只有实现不同。
假设类A正在使用类B,而类B有多种可用的实现。因此,在这种情况下,B将是抽象的,实际实现将在运行时提供。这就是策略模式。
现在,如果A本身是抽象的,则A和B都可能会变化。您将使用桥接模式。
我认为它们在使用的上下文中存在轻微的差异。
我使用桥接模式来分离正交概念,它们都属于一个更大的概念 - 让它们独立变化。通常涉及多个抽象。
在我看来,策略模式更简单或更扁平化。它确实用于OCP,但不一定是像桥接模式那样成为另一个更大的概念的一部分。
Bridge
是Strategy
和Template method
行为模式的组合。因此,我们按照Template method
中的相同顺序调用方法,并根据给定的实现者更改其行为,就像Strategy
模式一样。Bridge
模式用于行为方式吗?public class Ticket {
Date dateOfTravel;
int distance;
Vehicle vehicle;
Seat seat;
public float getTotalFare(){
//depends on
//Distance
//Vehicle - whether Vehicle is AC or non-AC.
//Seat - based on the location of the Seat.
//Fare = vehicleBaseFare*seatMultiplier*distance
}
}
public class Vehicle {
TrackingDevice device;
public Coordinates getCoordinates(){
return device.getCoordinates();
}
}
在这里,父类的角色是恒定的,也就是什么都没有做!因此,这就是一个策略模式。