梳理你的思路(从OOP到架构设计)_从架构到代码的演练02

目录

1、代码练习

亲自演练:题目(一)​

 亲自演练:题目(二)


1、代码练习

  • <买主来了>之前,架构师基于已具备的知识,来决定接口<I>;然后把其知识(又称强龙知识)写在基类<E>里。基于<I>,当买主出现了,才把买主的知识(又称地头蛇知识)写入子类<T>里。
  • 然后,两者汇合,成为完整的知识了。 如下图所示:
  • 依循EIT,进行演练…
  1. 架构师依循EIT造形,分出<E、 I、 T>三部分
  2. 把强龙知识写入于<E>里
  3. 把地头蛇(即买主)知识写入到<T>里
  4. 详细定义接口<I>
  5. <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>。
     

你可做下述三件事:

  1. 将N值写在<T>里
  2. 替各买主而设计一个子类别,将各自采取的算法(如1 + 2^2 + 3^2 +… +N^2)撰写于<T>里
  3. 替<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));
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思忖小下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值