对于以下模型,您更喜欢继承还是组合:

>我想在画布上绘制对象,每个对象代表一个数据对象

>将其视为状态机图:椭圆表示状态,线表示它们之间的连接/转换.对象表示本身永远不会改变,即状态将始终由椭圆显示.但是绘制椭圆的方式应该不同,例如,对于选择,它应该具有不同的颜色,而拖动它应该具有alpha通道等.

从设计的角度来看,椭圆不是状态,而线不是过渡.无论如何,将两个对象组合起来以便能够在List< Shape>中收集它们是合适的.并在每个对象上执行shape.draw().

现在有2个设计模型是可能的,而我认为2个类总是相同的:

interface Shape {

void draw();

}

abstract class Figure implements Shape {

//basic vars like start and end coordinates

int x0, y0, x1, y1;

}

遗产:

abstract class State extends Figure {

String name;

}

class Rectangle extends State {

@Override void draw();

}

class Line extends Figure;

class Transition extends Line

虽然从设计的角度来看,矩形不是状态,而状态不是图形,但是关于绘图上下文,这可能是可行的.因为我可以继承处理形状,绘图等所需的大部分东西.

或组成:

abstract class State {

String name;

}

class Rectangle extends Figure {

private State state;

@Override void draw();

}

class Line extends Figure {

private Transition transition;

@Override void draw();

}

所以Rectangle Line将是我的对象的包装器.

Rectangle和Line应该扩展State和Transition,还是包含它?

或者,也许还有一个我没有看到的第三个设计选项.期待您的想法.

最佳答案 所以,这是我的想法,但对于大多数设计问题,很少有一个“正确”的答案.

就像你说的,状态不是矩形,转换不是直线.我们可以画一条线和/或一个矩形,并且可能有一些优势来对待它们.所以我可以将这些语句翻译成一个简单的设计:

public interface Drawable

{

public void draw();

public Position getPos();

}

public class Rectangle implements Drawable ...

public class Line implements Drawable ...

现在,State’s和Transition’s可以用这些Drawables来表示.你听说过单一责任原则吗?它基本上就是它听起来的样子,一个Object应该负责做一件“事情”.矩形和直线知道如何绘制自己.状态和转换可能在您的系统中还有其他工作要做.

public interface Figure

{

public Drawable getDrawable();

}

public class State implements Figure

{

private Rectangle rect;

public Drawable getDrawable() { return rect; }

//... State's real "work" below

}

public class Transition implements Figure

{

private Line line;

// you get the idea

}

在一个小/简单的系统上,SRP的优点可能会丢失,但我们的想法是我们将渲染与其他系统逻辑分开.我们分离的功能越多,变更时间到来时系统就越不易碎.

java 继承 模型_java – 画布形状模型的继承与组合?相关推荐

  1. java委托事件模型_JAVA授权事件模型讲解(原创)

    JAVA的授权事件模型包含三个概念:事件源,事件,事件监听器. 一,事件源:一个产生事件的对象.当这个对象的内部状态改变时,事件就会产生.一个事件源必须注册一个事件监听器已使监听器能够可以接受一个特定 ...

  2. java中reactor模型_Java——Netty Reactor模型(转)

    1. Reactor三种线程模型 1.1. 单线程模型 Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下: 1)作为NIO服务端,接收客户端的TCP连接 ...

  3. 判刑形状模型_主动形状模型 - 作业部落 Cmd Markdown 编辑阅读器

    主动形状模型 机器学习 常见使用场景 ASM 模型是一种基于统计形变模型的分割算法.在分割图像时,综合考虑了图像的大小.灰度.大致位置和图像形状等先验知识.它使用从训练样本得到的统计模型作为初始位置, ...

  4. java编写太阳_java绘图--太阳系模型

    java绘图在工作中使用的并不是很多,但是从这种小程序中用到很多基本知识和编程理念,最重要的是,可以很快的看到效果,体会到学习java的乐趣,不像C语言那样,学了很久却不知道学了有什么用,在枯燥的学习 ...

  5. java线程的内存模型_java多线程内存模型

    java多线程内存模型: 可见性 要实现共享变量的可见性,必须保证两点: 1.线程修改后的共享变量能够及时从工作内存刷新到主内存中: 2.其他线程能够及时把共享变量的最新值从主内存更新到自己的工作内存 ...

  6. java多线程内存模型_Java多线程内存模型

    Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果.在此之前 ...

  7. java底层模型_Java I/O模型及其底层原理,夯实你的开发基础

    前言 Java I/O是Java基础之一,在面试中也比较常见,在这里我们尝试通过这篇文章阐述Java I/O的基础概念,帮助大家更好的理解Java I/O. 在刚开始学习Java I/O时,我很迷惑, ...

  8. java表格模型_java 的表格模型是什么?

    展开全部 DefaultTableModel是常用的java表格模型. 参考代码: package com.dusd; import java.awt.BorderLayout; import jav ...

  9. java高并发抢单编程模型_Java高并发模型

    package MainFixedFuc; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execu ...

最新文章

  1. WEP自动破解工具wesside-ng
  2. expected:instruction or directive
  3. 英语语法---句子成分总结
  4. python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境
  5. c语言程序设计课件第二章,c语言程序设计课件张元国 ISBN9787566300386 PPT第二章数据类型 运算符与表达式...
  6. CC学iOS杂记 001_Device
  7. “OpenGL.error.NullFunctionError: Attempt to call an undefined function”解决方案
  8. 群晖NAS设备安装和基础操作详细流程(例:DS920+)
  9. ThinkCMF框架修复漏洞 名称:ThinkPHP5 远程代码执行高危漏洞(CNNVD-201812-617)
  10. java初级项目 小说_webmagic项目实战(爬小说网站)
  11. 条码打印软件如何批量打印快递单
  12. Audacity的替代品
  13. 每日一诗词 —— 假如我不曾见过太阳
  14. 按出生年月日对身份证号进行排序
  15. UML中各种线条关系记忆技巧
  16. 7只老鼠找除100瓶水的有毒的水
  17. 市场调研 2.DAU、MAU、ARPU等究竟是什么
  18. UDF和UDAF,UDTF的区别
  19. webstorm 2019 最新注册码 破解方法(持续更新中~
  20. 美国十大被封杀网站排名

热门文章

  1. 弱引用什么时候被回收_Java引用类型有哪些
  2. 处理Matlab Coder之后, Compiler can't find tmwtypes.h问题
  3. SpringBoot 那些自带 Buff 的工具类,你用过几个?
  4. 阿里推荐的Redis使用规范,Redis就要这么用
  5. java基础提升篇:深入剖析Java中的装箱和拆箱
  6. anglarjs引入HTML头,请问怎么在html引入angularjs?
  7. JSTL 及 tablibs 的简单介绍和配置方法
  8. MYSQL专题-MVCC多版本并发控制
  9. tableau做rfm分析_RFM模型客户关系管理
  10. 运维基础(5)Ansible