- 论坛徽章:
- 0
|
对象建模笔记--角色建模1
好,现在我们设计出的接口看起来像是这样的:
??interface Person {
???public String name();
???public void name(String newName);
???public Money salary ();
???public void salary (Money newSalary);
???public Money payAmount ();
???public void makeManager ();
??}
??interface Engineer extends Person{
???public void numberOfPatents (int value);
???public int numberOfPatents ();
??}
??interface Salesman extends Person{
???public void numberOfSales (int numberOfSales);
???public int numberOfSales ();
??}
??interface Manager extends Person{
???public void budget (Money value);
???public Money budget ();
??}
??接口看起来不错,但是如何实现它呢,大致的做法有三种:内部标示(Internal Flag)、隐藏委托(Hidden Delegate)、 以及状态对象(State Object)。
??下面的例子只实现了销售员部分的代码,没有使用到多重继承或是动态继承,但却较好的解决了前述的问题:
??public class PersonImpFlag implements Person, Salesman, Engineer,Manager{
??// Implementing Salesman
??public static Salesman newSalesman (String name){
???PersonImpFlag result;
???result = new PersonImpFlag (name);
???result.makeSalesman();
???return result;
??};
??public void makeSalesman () {
???_jobTitle = 1;
??};
??public boolean isSalesman () {
???return _jobTitle == 1;
??};
??public void numberOfSales (int value){
???requireIsSalesman () ;
???_numberOfSales = value;
??};
??public int numberOfSales () {
???requireIsSalesman ();
???return _numberOfSales;
??};
??private void requireIsSalesman () {
???if (! isSalesman()) throw new PreconditionViolation ("Not a Salesman" ;
??};
???private int _numberOfSales;
???private int _jobTitle;
??} |
|