テンプレート設計モード(一)-定義およびソースコードで使用されるテンプレート設計モード

3472 ワード

前言
テンプレート設計モードシリーズ文章テンプレート設計モード(一)-定義及びソースコードに用いられるテンプレート設計モードテンプレート設計モード(二)-スレッドプール動作機構テンプレート設計モード(三)-OkHttpのDispatcher(ラインプール)
1.テンプレート設計モード定義?
操作中のアルゴリズムのフレームワークを定義し、いくつかのステップをサブクラスに遅延します.サブクラスがアルゴリズムの構造を変更することなく、アルゴリズムの特定のステップを再定義することができる.
はっきり言って、継承しなければなりません.親は一般的にプロセスと汎用部分のパッケージで、子は一般的に親を実現する方法で、それから自分の具体的な機能を実現します.
2.ソースコードに使われるテンプレートのデザインパターンは?
1>:Activityのライフサイクル
  • はまずAppCompatActivityから継承されており、そのプロセスと仕様はすでに定義されており、私たちが定義するActivity(MainActivity、LoginActivity、RegisterActivityなどのすべてのActivity)のライフサイクルのプロセスと仕様はAppCompatActivityと同じであることが要求されています.
  • 私たちが定義したActivityごとに異なるインタフェースを定義することができ、具体的な論理を実現することができます.

  • 2>: AsyncTask
        /**
         *    doInBackground       ,           
         */
        class Task extends AsyncTask{
    
    
            /**
             *            
             */
            @Override
            protected Object doInBackground(Object[] params) {
                return null;
            }
    
            /**
             *     
             */
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }
    
    
            /**
             *        handler      
             */
            @Override
            protected void onPostExecute(Object object) {
                super.onPostExecute(object);
            }
    
    
            /**
             *     
             */
            @Override
            protected void onProgressUpdate(Object[] values) {
                super.onProgressUpdate(values);
            }
        }
    

    3>:Viewのdraw()メソッドをカスタマイズする
  • ViewGroupはonDraw()メソッドを呼び出さない
  • です.
  • ビューでは、dispatchDraw()を呼び出し、子を描く、子ビューを繰り返し呼び出すdraw()メソッドです.このメソッドは何も書かれていません.私たちは自分のニーズに合わせて
  • を実現することができます.
    具体的には私の前の文章を参照してください:(ST)Viewの描画プロセス-onDraw()ソースコード分析
    4>:BaseActivity
    3.開発中のBaseActivity
    1>:親BaseActivityコードは次のとおりです.
    /**
     * Email: [email protected]
     * Created by Novate 2018/5/13 9:46
     * Version 1.0
     * Params:
     * Description:          
    */
    public abstract class BaseActivity extends AppCompatActivity {
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // 1.     
            setContentView() ;
    
    
            /**
             *     :  
             *                ,      true,         false
             */
            if (flagTest()) {
                // 2.      Title
                initTitle();
            }
            // 3.    View
            initView() ;
            // 4.       
            initData(savedInstanceState) ;
    
        }
    
        protected boolean flagTest() {
            return true;
        }
    
        protected abstract void initData(Bundle savedInstanceState);
    
        protected abstract void initView();
    
        protected abstract void initTitle();
    
        protected abstract void setContentView() ;
    
        public void startActivity(Class extends BaseActivity> clazz) {
            Intent intent =  new Intent(this,clazz);
            startActivity(intent);
        }
    }
    

    2>:サブクラスMainActivityコードは次のとおりです.
    public class MainActivity extends BaseActivity {
    
    
        @Override
        protected void initData(Bundle savedInstanceState) {
    
        }
    
        @Override
        protected void initView() {
    
        }
    
        @Override
        protected void initTitle() {
    
        }
    
        @Override
        protected void setContentView() {
    
        }
    
    
        /**
         *   :          ,    false,    true
         */
        @Override
        protected boolean flagTest() {
            return false;
        }
    }
    

    コードはgithubにアップロードされましたhttps://github.com/shuai999/Architect_day12.git