桥接模式
情景分析,当前有不同品牌,不同样式的手机,有打电话开关机的功能,如和增加样式,品牌最为便捷,如果我们直接加品牌的话意为着要为每个样式里多加一个品牌,加样式的话又要新样式下写手机品牌
我们使用桥接模式
- 定义桥梁接口Brand,各大品牌实现Brand
- 定义手机列Phone,Phone聚合Brand并且调用Brand里的手机功能
- 样式类继承Phone,并重写父类功能方法,加入样式
- 这样就达到如果要加手机和样式,我们只需要再加一个相应的类就行
Brand
package com.xiaojie.qiaojie;
//接口
public interface Brand {
void open();
void close();
void call();
}
Phone
package com.xiaojie.qiaojie;
public abstract class Phone {
private Brand brand; //聚合
public Phone(Brand brand) {
this.brand = brand;
}
public void open(){
brand.open();
}
public void close() {
brand.close();
}
public void call() {
brand.call();
}
}
各大品牌手机
package com.xiaojie.qiaojie;
public class Vivo implements Brand{
@Override
public void open() {
System.out.println("Vivo开机");
}
@Override
public void close() {
System.out.println("Vivo关机");
}
@Override
public void call() {
System.out.println("Vivo打电话");
}
}
//--------分界线---------
package com.xiaojie.qiaojie;
public class XiaoMi implements Brand{
@Override
public void open() {
System.out.println("小米开机");
}
@Override
public void close() {
System.out.println("小米关机");
}
@Override
public void call() {
System.out.println("小米打电话");
}
}
各大样式类
package com.xiaojie.qiaojie;
public class FoldedPhone extends Phone{
public FoldedPhone(Brand brand) {
super(brand);
}
@Override
public void open() {
super.open();
System.out.println("折叠手机");
}
@Override
public void close() {
super.close();
System.out.println("折叠手机");
}
@Override
public void call() {
super.call();
System.out.println("折叠手机");
}
}
//--------分界线---------
package com.xiaojie.qiaojie;
public class UpRightPhone extends Phone{
public UpRightPhone(Brand brand) {
super(brand);
}
@Override
public void open() {
super.open();
System.out.println("直立手机");
}
@Override
public void close() {
super.close();
System.out.println("直立手机");
}
@Override
public void call() {
super.call();
System.out.println("直立手机");
}
}
测试类
package com.xiaojie.qiaojie;
public class Client {
public static void main(String[] args) {
Phone phone = new FoldedPhone(new XiaoMi());
phone.open();
phone.close();
phone.call();
Phone phone1 = new FoldedPhone(new Vivo());
phone1.open();
phone1.close();
phone1.call();
}
}