在上图实例中,可以通过ShowroomItem的引用或interface Vehicle的引用来引用myCar。相应地,客户端驱动程序/销售工程师将获得功能访问权。
我同意在实现阶段(例如Java),这里不需要类型标识,我们将把myCar当作自己使用的基类型(任一接口)的实例。
但在顺序图中(为了清楚起见),我无法指出myCar的驾驶员引用应该是Vehicle的,而SalesEngineer的引用应该是ShowRoomItem的。
package com.se.stackoverflow;
interface Vehicle {
abstract void start();
abstract void stop();
}
interface ShowroomItem {
abstract void buy();
abstract void sell();
}
class Car implements ShowroomItem, Vehicle {
// **Car IS-A Vehicle and ShowroomItem BY-DEFINITION**
// **and as per SOLID principle interface segregation**
public void start() { System.out.println("Started");}
public void stop() { System.out.println("Stopped");}
public void sell() { System.out.println("Sold");}
public void buy() { System.out.println("Baught");}
}
class SalesEngineer {
private ShowroomItem item = null;
public SalesEngineer(ShowroomItem item) { this.item = item;}
public void doTransaction() {item.buy(); item.sell();}
}
class Driver {
private Vehicle veh = null;
public Driver(Vehicle veh) {this.veh = veh;}
public boolean testDrive() {veh.start(); veh.stop(); return true;}
}
public class ShowroomOwner {
public void makeDeal(Car carForDeal) {
Driver driver = new Driver(carForDeal);
SalesEngineer engineer = new SalesEngineer(carForDeal);
if (driver.testDrive()) {
engineer.doTransaction();
}
}
public static void main(String[] args) {
// simulates client as ShowroomOwner to save space
new ShowroomOwner().makeDeal(new Car());
}
}
您需要为序列图的每个生命线选择要显示的类型,因为UML只允许一个生命线。由于mycar
是实现vehicle
和showroomitem
的car
,您可以选择以下三种类型中的任何一种。
一旦选择了类型,UML就没有办法在同一图中提供该类型的替代视图。您可以使用mycar
作为car
来显示该场景。但是其他生命线必须遵守它们所知道的接口(如果没有其他使用依赖关系允许它们访问整个Car),并且由您来确保一致性。这可能容易出错,正如您在playmusic()
中所演示的那样。
您可以通过图表中的一个或几个注释来解决您的问题,以纯文本方式提醒读者与接口相关的约束。但更好的方法是保持简单,在两个单独的图中显示salesengineer
和car
之间的交互,以及driver
和car
之间的交互。这更接近于您的设计的现实,并促进了关注的合理分离。
如果一辆车不是一个陈列室项目,它既不应该从这样的类继承,也不应该实现这样的接口。因此,更喜欢组合而不是继承,例如:
本文向大家介绍js对象类型,基本对象类型以及引用对象类型的区别?相关面试题,主要包含被问及js对象类型,基本对象类型以及引用对象类型的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 分为基本对象类型和引用对象类型 基本数据类型:按值访问,可操作保存在变量中的实际的值。基本类型值指的是简单的数据段。基本数据类型有这六种:undefined、null、string、number、bool
我使用带thymeleaf 3的Spring靴 我试着展示一个豆子 在我的控制器里我有 在我的车里 在我的位置 在我的胸腺碎片中 当我试图显示这个片段时,我得到 org.attoparser。ParseException:异常评估SpringEL表达式:“cities.id”由:org.springframework.expression.spel引起。SpelEvaluationExceptio
问题内容: 我从“ Head First Java”学习“多态”,然后想到了这个概念。有人可以举例说明吗? 编译器检查引用类型的类,而不是对象类型。 那么引用类型和对象类型之间有什么区别? 问题答案: 我认为它们对“对象类型”和“引用类型”的使用不是标准化的,但这是我的解释。 考虑以下代码: 该 引用 是类型的。它引用的 对象 是类型。 因此,“引用类型”为,“对象类型”为。 造成这种混乱的原因是
问题内容: Java中的以下代码在elipse上运行时,即使我们将其替换,也会提供相同的输出 与, 请注意,我们已经覆盖了方法。 输出为: 码: 请指出,用这两种方式创建子类对象有什么区别。并且访问方法和变量是否有任何区别?(我们的Java老师说,两种情况下访问方法和变量都不同) 同样,静态方法(例如main)会发生什么。艰难的我知道它是可继承的,但是有人可以在子类中突出它的行为吗? 问题答案:
考虑下面的代码: 对于上面的代码,输出是:
在Kotlin的类中,一个对象和一个同伴对象有什么区别? 它的“静态”(我是java方面的)生命周期可能有区别吗?