zoukankan      html  css  js  c++  java
  • 依赖倒转原则与合成复用原则---实例

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

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

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

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

    重构后的类图:

     

    依赖倒转原则与合成复用原则:利用合成复用原则与依赖倒转原则,根据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());
    }
    }

     

  • 相关阅读:
    CF1137FMatches Are Not a Child‘s Play【LCT】
    P4491[HAOI2018]染色【多项式,二项式反演】
    P3170[CQOI2015]标识设计【插头dp】
    log4j 使用教程说明
    log4j中Logger.getLogger()加载一个类提示错误
    编程基础 0x00008 的0x代表什么?
    编程基础 快速的进行 2进制,10进制,16进制 的 相互转换
    Java 基础 equals,hashcode和==的区别
    位运算 左移右移运算符 >>, <<, >>>
    Java 虚拟机 2.2 运行时数据区 Runtime Data Area
  • 原文地址:https://www.cnblogs.com/sengzhao666/p/12031473.html
Copyright © 2011-2022 走看看