安卓手机本地视频播放器,网络seo推广培训,动漫设计与制作行业,织梦做导航网站目录 一、背景二、桥接模式的demo1、类型A#xff08;形状类型#xff09;2、类型B#xff08;颜色类型#xff09;3、需求#xff1a;类型A要使用类型B#xff08;如#xff1a;红色的方形#xff09;4、Spring的方式 一、背景
在《对装饰器模式的理解》中#xff0… 目录 一、背景二、桥接模式的demo1、类型A形状类型2、类型B颜色类型3、需求类型A要使用类型B如红色的方形4、Spring的方式 一、背景
在《对装饰器模式的理解》中当我们想基于某个类做扩展时我们不是采用继承而是组合的方式。这样可以避免子类爆炸的问题。 想象一下俄罗斯套娃类与类之间的结果也类似。 还有一种场景 如果采用继承的方式例如类型AB1、类型AB2等也会导致子类爆炸。那怎么解决呢 -- 依然是组合。
二、桥接模式的demo
1、类型A形状类型
public interface Shape {void draw();
}public class Circle implements Shape {Overridepublic void draw() {System.out.println(circle);}
}public class Square implements Shape {Overridepublic void draw() {System.out.println(square);}
}2、类型B颜色类型
public interface Color {void fill();
}public class RedColor implements Color {Overridepublic String fill() {return red;}
}public class BlueColor implements Color {Overridepublic String fill() {return blue;}
}3、需求类型A要使用类型B如红色的方形
将类型A和类型B桥接起来。本质上就是组合 装饰器模式是同一接口同一抽象的组合。 桥接模式是不同接口不同抽象的组合。 实现
public class Circle implements Shape {private Color color;public Circle(Color color) {this.color color;}Overridepublic void draw() {System.out.println(color.fill() circle);}
}public class Square implements Shape {private Color color;public Square(Color color) {this.color color;}Overridepublic void draw() {
// System.out.println(square);System.out.println(color.fill() square);}
}public class Application {public static void main(String[] args) {Shape redCircle new Circle(new RedColor());redCircle.draw();Shape blueCircle new Circle(new BlueColor());blueCircle.draw();System.out.println(-------------------------------);Square redSquare new Square(new RedColor());redSquare.draw();Square blueSquare new Square(new BlueColor());blueSquare.draw();}
}4、Spring的方式 实际开发中我们希望Spring帮我们组织好bean我们拿来就用即可。 Configuration
public class ShapeConfig {Beanpublic Color blueColor() {return new BlueColor();}Beanpublic Color redColor() {return new RedColor();}Beanpublic Square blueSquare(Qualifier(blueColor) Color blueColor) {return new Square(blueColor);}Beanpublic Square redSquare(Qualifier(redColor) Color redColor) {return new Square(redColor);}Beanpublic Circle blueCircle(Qualifier(blueColor) Color blueColor) {return new Circle(blueColor);}Beanpublic Circle redCircle(Qualifier(redColor) Color redColor) {return new Circle(redColor);}
}ComponentScan
public class Application {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(Application.class);Circle blueCircle applicationContext.getBean(blueCircle, Circle.class);blueCircle.draw();Circle redCircle applicationContext.getBean(redCircle, Circle.class);redCircle.draw();System.out.println(--------------------------------------------------------------------------------);Square blueSquare applicationContext.getBean(blueSquare, Square.class);blueSquare.draw();Square redSquare applicationContext.getBean(redSquare, Square.class);redSquare.draw();applicationContext.close();}
}