來源:http://www.bjsxt.com/
一、S03E238_01【GOF23設計模式】_橋接模式、多層繼承結構、銀行日誌管理、管理系統消息管理、人力資源的獎金計算
未用橋接模式:
package com.test.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.test.bridge;
/**
* 電腦類型的維度
*/
public class Computer2 {
protected Brand brand;
public Computer2(Brand brand) {
super();
this.brand = brand;
}
public void sale(){
brand.sale();
}
}
class Desktop2 extends Computer2{
public Desktop2(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("銷售筆記本");
}
}
package com.test.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("銷售戴爾電腦");
}
}
//新增之前沒有的品牌,不用同時新增電腦類型(不用在Computer2中寫代碼)
class Shenzhou implements Brand{
@Override
public void sale() {
System.out.println("銷售神舟電腦");
}
}
package com.test.bridge;
public class Client {
public static void main(String[] args) {
//銷售聯想的筆記本電腦
Computer2 c = new Laptop2(new Lenovo());
c.sale();
//銷售神舟的筆記本電腦
Computer2 c2 = new Desktop2(new Shenzhou());
c2.sale();
}
}