结构型模式之桥接模式

        场景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();
   }
}

桥接模式总结:

        ①:桥接模式可以取代多层继承的方案。多层继承违背了单一职责原则,复用性较差,类的个数也非常多。

桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。

        ②:桥接模式极大的提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系

统,符合单一原则和开闭原则。

桥接模式:就像一个桥,将两个变化的维度连接起来,然后各个维度可以独立变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值