场景1(不使用桥接模式的情况下):商城系统中常见的商品分类,以电脑为例,如何良好的处理商品分类销售的问题??
一般解决方法是:用多继承结构的方式层层继承。
但是由此会引发已写问题:
①:扩展性问题(类个数的快速增长)
②:违反单一职责原则
场景2(使用桥接模式的情况下):商场系统中常见的商品分类,以电脑为类,如何良好的处理商品分类销售的问题?
场景分析:
商场中变化的只有两个原因:电脑类型和电脑品牌(如果以后我们在进行代码场景分析的时候,如果有两种及以上的变化原因
的话,考虑使用桥接模式)
桥接模式核心要点:
当处理多层继承结构,处理多维度(变化原因)变化的场景,我们需要将各个维度设计成独立的继承结构,使各个维度可以独立的扩展
在抽象层建立关联
完整代码示例1(不使用桥接模式):
public interface Computer {
void sale();
}
class Deskpro implements Computer{
@Override
public void sale() {
System.out.println("销售台式机!!!");
}
}
class Laptop implements Computer{
@Override
public void sale() {
System.out.println("销售笔记本!!!");
}
}
class Pad implements Computer{
@Override
public void sale() {
System.out.println("销售Pad!!!");
}
}
class LenovoDeskpro extends Deskpro{
@Override
public void sale() {
System.out.println("销售联想台式机!!!");
}
}
class LenovoLaptop extends Deskpro{
@Override
public void sale() {
System.out.println("销售联想笔记本!!!");
}
}
class LenovoPad extends Pad{
@Override
public void sale() {
System.out.println("销售联想Pad!!!");
}
}
完整代码示例1(使用桥接模式):
public class Computer2 {
/**
* 不能使用private,因为子类需要去使用它,所以使用protected
* 因此我们的电脑天然的拥有了品牌的属性
*/
protected Brand brand;
public Computer2(Brand brand) {
this.brand = brand;
}
public void sale(){
brand.sale();
}
}
class Deskpro2 extends Computer2{
public Deskpro2(Brand brand) {
super(brand);
}
@Override
public void sale() {
super.sale();
System.out.println("销售台式机");
}
}
class Laptop2 extends Computer2{
public Laptop2(Brand brand) {
super(brand);
}
@Override
public void sale() {
super.sale();
System.out.println("销售笔记本");
}
}
/**
* 品牌类(电脑品牌的维度)
*/
public interface Brand {
void sale();
}
/**
* 只知道销售什么品牌的电脑,不需要知道什么类型的电脑
* @author 270830
*
*/
class lenovo implements Brand{
@Override
public void sale(){
System.out.println("销售联想电脑");
}
}
class Dell implements Brand{
@Override
public void sale(){
System.out.println("销售戴尔电脑");
}
}
public class Client {
public static void main(String[] args) {
Computer2 c = new Deskpro2(new lenovo());
c.sale();
}
}
桥接模式总结:
①:桥接模式可以取代多层继承的方案。多层继承违背了单一职责原则,复用性较差,类的个数也非常多。
桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
②:桥接模式极大的提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系
统,符合单一原则和开闭原则。
桥接模式:就像一个桥,将两个变化的维度连接起来,然后各个维度可以独立变化。