Java23种设计模式
桥模式用于抽象(abstraction)与实现(implementation)功能的解耦,使复杂的项目逻辑简单化,符合迪米特法则。
需求:小明主业是厨师,同时他也喜欢唱歌,但是我们不想把两个属性写到一起。
- 创建歌手接口,里面有唱歌的方法。
public interface Singer {
void sing();
}
- 创建小明唱歌类,里面小明唱了一首我爱祖国。
public class XMSong implements Singer{
@Override
public void sing() {
System.out.print("小明唱了一首我爱祖国!\n");
}
}
- 创建厨师抽象方法,里面包含厨师会用刀的刀工,并且开放做菜的抽象方法让自由发挥。
public abstract class Cooker {
abstract void cook();
public void useKnife(){
System.out.print("厨师会用刀!\n");
}
}
- 创建桥连接类,里面继承了Cooker,也包含Singer的实现类,并且新增一个连接实现类的抽象方法,这样写的原因是现实中singer接口可能有多个方法,所以调用接口方法放倒下一步实现。
public abstract class Bridge extends Cooker{
private Singer singer;
public Bridge(Singer singer) {
this.singer = singer;
}
public Singer getSinger() {
return singer;
}
abstract void letSing();
}
- 创建小明,实现做菜方法,做大盘鸡,在letSing方法中控制唱歌接口。
public class XiaoMing extends Bridge{
public XiaoMing(Singer singer) {
super(singer);
}
@Override
public void letSing() {
getSinger().sing();
}
@Override
public void cook(){
System.out.print("小明做了一盘大盘鸡!\n");
}
}
- 测试程序
public class Test {
public static void main(String[] args) {
XiaoMing xiaoMing = new XiaoMing(new XMSong());
xiaoMing.letSing();
xiaoMing.cook();
xiaoMing.useKnife();
}
}
打印结果
小明唱了一首我爱祖国!
小明做了一盘大盘鸡!
厨师会用刀!