依赖倒转原则与合成复用原则---实例
依赖倒转原则与合成复用原则
在一画图软件中提供了多种大小不同的画笔,并且可以给画笔指定不同的颜色,某设计人员对画笔进行了如上图所示的设计。通过分析,可以发现增加画笔的种类和颜色会使得系统中类的数目急剧增加,请根据合成复用原则和依赖倒转原则对上述设计进行重构。
依赖倒转原则:程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
合成复用原则:它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现
重构后的类图:
依赖倒转原则与合成复用原则:利用合成复用原则与依赖倒转原则,根据Pen的大小与颜色编写两个抽象类Size与Color;底层具体类extends抽象类(泛化关系),高层Pen类由Size与Color聚合而来(聚合关系);
代码实现:
型号抽象类
public abstract class Size { public abstract void sizePen(); }
具体型号类
public class SmallPen extends Size{ //小型 public void sizePen() { System.out.println("小型"); } } public class MiddlePen extends Size{ //中型 public void sizePen() { System.out.println("中型"); } } public class BigPen extends Size{ //大型 public void sizePen() { System.out.println("大型"); } }
颜色抽象类
public abstract class Color { public abstract void colorPen(); }
具体颜色类
public class GreenPen extends Color{
public void colorPen() {
System.out.println("绿色");
}
}
public class RedPen extends Color{
public void colorPen() {
System.out.println("红色");
}
}
钢笔
public class Pen { //钢笔 private Size size; private Color color; public Size getSize() { return size; } public void setSize(Size size) { this.size = size; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } }
聚合钢笔
public class MianClass { public static void main(String[] args) { //颜色大小随意组合 Pen pen=new Pen(); //组合小型红色钢笔 pen.setSize(new SmallPen()); pen.setColor(new RedPen()); //组合大型绿色钢笔 pen.setSize(new BigPen()); pen.setColor(new GreenPen()); } }