目录
1、代码练习
- <买主来了>之前,架构师基于已具备的知识,来决定接口<I>;然后把其知识(又称强龙知识)写在基类<E>里。基于<I>,当买主出现了,才把买主的知识(又称地头蛇知识)写入子类<T>里。
- 然后,两者汇合,成为完整的知识了。 如下图所示:

- 依循EIT,进行演练…
- 架构师依循EIT造形,分出<E、 I、 T>三部分
- 把强龙知识写入于<E>里
- 把地头蛇(即买主)知识写入到<T>里
- 详细定义接口<I>
- <E>是控制点,透过<I>来调用<T>。

亲自演练:题目(一)

从上图可引导你决定三件事:
- 算法(1+2+3+… +N)必须撰写于<E>里。
- N值必须撰写于<T>里。
- 设计<I>里的函数,让<E>调用<T>去取得N值。

- 在架构設計上,可以将上图ICount接口裡的onCount()函數併入Counter類裡。
- 只要不改变onCount()函数,就不会影响到myCounter了。如下图:

// Counter.java
package myFramework;
public abstract class Counter {
public int run() {
int N;
N = this.onCount();
int sum = 0;
for(int i=1; i<=N; i++) sum += i;
return sum;
}
public abstract int onCount();
}
// myCounter.java
package com.misoo.pk07;
import myFramework.Counter;
public class myCounter extends Counter{
public int onCount() {
return 10;
}
}
// myActivity.java
// …….
public class myActivity extends Activity implements OnClickListener{
private Button ibtn;
private Counter counter;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
ibtn = new Button(this);
ibtn.setOnClickListener(this);
ibtn.setText("Exit");
ibtn.setBackgroundResource(R.drawable.gray);
LinearLayout.LayoutParams param1 =new LinearLayout.LayoutParams(150, 65);
param1.topMargin = 10;
param1.leftMargin = 5;
layout.addView(ibtn, param1);
setContentView(layout);
counter = new myCounter();
//模板设计模式
int sum = counter.run();
setTitle("sum = " + String.valueOf(sum));
}
public void onClick(View arg0) { finish(); }
}
亲自演练:题目(二)

- 现在可以试试先想想接口<I>设计: <T>必须有个抽象函数,来反向调用(IoC)到<T>。在调用该函数时,顺便把<E>里的N值传递下去给<T>。
- 由<T>进行计算工作,然后将计算结果传回给<E>。
你可做下述三件事:
- 将N值写在<T>里
- 替各买主而设计一个子类别,将各自采取的算法(如1 + 2^2 + 3^2 +… +N^2)撰写于<T>里
- 替<T>设计一个抽象函数onCal( n:int ),让<E>能调用<T>,取得<T>的计算结果

// Counter.java
public abstract class Counter {
public int run(){
int N = getCount();
return onCal(N);
}
public int getCount() { return 6; }
protected abstract int onCal(int n);
}
// myCounter.java
public class myCounter extends Counter{
@Override
protected int onCal(int n) {
int sum = 0;
for(int i=1; i<=n; i++) {
sum += i;
}
return sum;
}
}
//……..
public class myActivity extends Activity{
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
LinearLayout layout = new LinearLayout(this);
//……..
setContentView(layout);
//---------------------------------------------
counter = new myCounter();
int sum = counter.run();
setTitle("sum = " + String.valueOf(sum));
}
}
163

被折叠的 条评论
为什么被折叠?



