18-桥接器模式
18-桥接器模式
概念
桥接模式(Bridge), 将抽象部分与它的实现部分分离,使它们都可以独立的变化,实现指的是抽象类和它的派生类用来实现自己的对象。
实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合。
实现
package com.gof.bridge;
/**
* 手机软件
*
* @since 2023-02-25
*/
public interface PhoneSoftware {
void run();
}
package com.gof.bridge;
/**
* 功能描述
*
* @since 2023-02-25
*/
public class Game implements PhoneSoftware {
@Override
public void run() {
System.out.println("运行游戏");
}
}
package com.gof.bridge;
/**
* 功能描述
*
* @since 2023-02-25
*/
public class AddressBook implements PhoneSoftware {
@Override
public void run() {
System.out.println("运行通讯录");
}
}
package com.gof.bridge;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 功能描述
*
* @since 2023-02-25
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public abstract class PhoneBrand {
protected PhoneSoftware software;
public abstract void run();
}
package com.gof.bridge;
import lombok.Data;
/**
* 功能描述
*
* @since 2023-02-25
*/
@Data
public class BrandM extends PhoneBrand {
@Override
public void run() {
System.out.println("M品牌");
software.run();
}
}
package com.gof.bridge;
import lombok.Data;
/**
* 功能描述
*
* @since 2023-02-25
*/
@Data
public class BrandN extends PhoneBrand {
@Override
public void run() {
System.out.println("N品牌");
software.run();
}
}
package com.gof.bridge;
/**
* 功能描述
*
* @since 2023-02-25
*/
public class Client {
public static void main(String[] args) {
BrandM m = new BrandM();
m.setSoftware(new AddressBook());
m.run();
m.setSoftware(new Game());
m.run();
BrandN n = new BrandN();
n.setSoftware(new AddressBook());
n.run();
n.setSoftware(new Game());
n.run();
}
}