依赖倒转原则与合成复用原则---实例

依赖倒转原则与合成复用原则

在一画图软件中提供了多种大小不同的画笔,并且可以给画笔指定不同的颜色,某设计人员对画笔进行了如上图所示的设计。通过分析,可以发现增加画笔的种类和颜色会使得系统中类的数目急剧增加,请根据合成复用原则和依赖倒转原则对上述设计进行重构。

依赖倒转原则程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

合成复用原则它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现

重构后的类图:

 

依赖倒转原则与合成复用原则:利用合成复用原则与依赖倒转原则,根据Pen的大小与颜色编写两个抽象类SizeColor;底层具体类extends抽象类(泛化关系),高层Pen类由SizeColor聚合而来(聚合关系);

代码实现:

型号抽象类

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());
}
}

 

原文地址:https://www.cnblogs.com/sengzhao666/p/12031473.html