GOF23设计模式之桥接模式的实现


/**
 * 在这个源代码程序的编写中,我们很明显的感觉到扩展的吃力。因为类的数量会急剧膨胀。
 * 如果要增加一个品牌,或者一种类型的电脑,都会有大量的工作要完成。
 * 违反单一职责原则:
 *   一个类,联想笔记本,有两个引起类型变化的东西。
 * 这个类型中,有两个变化的维度。电脑类型和电脑品牌。
 * 
 */
package com.bjsxt.cn.bridge;
public interface Computer {
 void sale();
}
class Desktop 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("销售平板电脑");
  
 }
 
}
class LenovoDesktop extends Desktop {
 @Override
 public void sale() {
  System.out.println("销售联想台式机");
 }
}
class LenovoLaptop extends Laptop {
 @Override
 public void sale() {
  System.out.println("销售联想笔记本");
 }
}
class LenovoPad extends Pad {
 @Override
 public void sale() {
  System.out.println("销售联想平板电脑");
 }
}
class ShenzhouDesktop extends Desktop {
 @Override
 public void sale() {
  System.out.println("销售神州台式机");
 }
}
class ShenzhouLaptop extends Laptop {
 
 @Override
 public void sale() {
  System.out.println("销售神舟笔记本");
 }
}
class ShenzhouPad extends Pad {
 @Override
 public void sale() {
  System.out.println("销售神舟平板");
 }
}
class DellDesktop extends Desktop {
 @Override
 public void sale() {
  System.out.println("销售戴尔台式机");
 }
}
class DellLaptop extends Laptop { 
 @Override
 public void sale() {
  System.out.println("销售戴尔笔记本");
 }
}
class DellPad extends Pad {
 
 @Override
 public void sale() {
  System.out.println("销售戴尔平板");
 }
}




package com.bjsxt.cn.bridge;
public interface Brand {
 void sale();
}
class Lenovo implements Brand {
 @Override
 public void sale() {
  System.out.println("销售联想电脑");
 }
}
class Dell implements Brand {
 @Override
 public void sale() {
 System.out.println("销售戴尔电脑");
 }
 
}




/**
 * 时间:2015年4月6日09:37:19
 * 电脑类型继承体系。
 * aggregration聚合意思
 * 
 * 桥接模式的实现:
 *   核心要点: 
 *    处理多继承结构,处理多个维度变化的场景。
 *    将各个维度设计成独立变化的继承体系,使各个维度可以独立的进行扩展。
 *    在抽象层建立关联。
 */
package com.bjsxt.cn.bridge;
/**
 * 需要类而不是类型,是因为需要持有成员变量Brand类型
 * @author wanna_000
 *
 */
public class Computer2 {
 protected Brand brand;//肯定是要子类去访问它的。所以不能使用private
 
 public Computer2() {
 
 }
 public Computer2(Brand brand) {
  this.brand = brand;
 }
 
 void sale() {
  brand.sale();
 }
 
 
}
class Desktop2 extends Computer2 {
 
 public Desktop2(Brand brand) {
  this.brand = brand;//此时this.brand访问到的是父类中的成员变量brand
 }
 @Override
 void sale() {
  brand.sale();
  System.out.println("销售台式机");
 }
}
class Laptop2 extends Computer2 {
 public Laptop2(Brand b) {
  brand = b;//这个时候就需要访问父类的brand成员变量
 }
 @Override
 void sale() {
  brand.sale();
  System.out.println("销售笔记本");
 }
}
class Pad2 extends Computer2 {
 @Override
 void sale() {
  super.sale();
  
  System.out.println("销售平板电脑");
 }
}



/**
 * 时间:2015年4月6日09:47:13
 * 程序作用:测试桥接模式的使用
 */
package com.bjsxt.cn.bridge;
public class Client {
 public static void main(String[] args) {
  Computer2 computer2 = new Laptop2(new Lenovo());
  computer2.sale();
  
  //而如果此时我们想要增加一个品牌类型,方正,只需要到新建一个品百Fangzheng实现Brand接口即可了。
  
  Computer2 c2 = new Desktop2(new Fangzheng());
  c2.sale();
 
 }
}
/*
 * 
销售联想电脑
销售笔记本
 * 
 * */




/**
 * @author wannachan@outlook.com
 * 时间:2015年4月6日09:53:46
 * 为了说明方便扩展,我们增加了方正的品牌
 */
package com.bjsxt.cn.bridge;
public class Fangzheng implements Brand {
 @Override
 public void sale() {
  System.out.println("销售方正电脑");
  
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值