将抽象和实现解耦,使得两者可以独立地变化。
public abstract class AbstractShape { Color color; public AbstractShape(Color color){ this.color = color; } public abstract void draw(); }
public interface Color { String getColor(); }
public class Cricle extends AbstractShape { public Cricle(Color color) { super(color); } @Override public void draw() { System.out.println("使用" + color.getColor() + "画圆形"); } }
public class Square extends AbstractShape { public Square(Color color) { super(color); } @Override public void draw() { System.out.println("使用" + color.getColor() + "画正方形"); } }
public class Red implements Color { @Override public String getColor() { return "红色"; } }
public class Green implements Color { @Override public String getColor() { return "绿色"; } }
public class Test { public static void main(String[] args) { Color color = new Green(); AbstractShape shape = new Square(color); shape.draw(); } }