9.设计模式之桥接模式

桥接是用于把抽象化与实现化解耦,使得二者可以独立变化。属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
优点:

  1. 抽象和实现的分离
  2. 优秀的扩展能力
  3. 实现细节对客户透明

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

public class BridgePatternTest {
    
    

	@Test
	public void testBridgePattern(){
    
    
		Shape redCircle=new Circle(100,10,10,new RedCircle());
		Shape greenCircle=new Circle(50,10,10,new GreenCircle());
		
		redCircle.draw();
		greenCircle.draw();
	}
}
public interface DrawAPI {
    
    
	void drawCircle(int radius,int x,int y);
}
public class GreenCircle implements DrawAPI{
    
    

	@Override
	public void drawCircle(int radius, int x, int y) {
    
    
		System.out.println("[Draw GreenCircle -> radius:"+radius+"x:"+x+"y:"+y+"]");	
	}
}
public class RedCircle implements DrawAPI {
    
    

	@Override
	public void drawCircle(int radius, int x, int y) {
    
    
		System.out.println("[Draw RedCircle -> radius:"+radius+"x:"+x+"y:"+y+"]");	
	}
}
public abstract class Shape {
    
    
    protected DrawAPI drawAPI;
    
    protected Shape(DrawAPI drawAPI){
    
    
    	this.drawAPI=drawAPI;
    }
    
    public abstract void draw();
}
public class Circle  extends Shape{
    
    

	private int radius;
	private int x;
	private int y;
	
	public Circle(int radius,int x,int y,DrawAPI drawAPI) {
    
    
		super(drawAPI);
		this.radius=radius;
		this.x=x;
		this.y=y;
	}

	public void draw(){
    
    
		drawAPI.drawCircle(radius, x, y);
	}
}

猜你喜欢

转载自blog.csdn.net/SJshenjian/article/details/130901942
今日推荐