zoukankan      html  css  js  c++  java
  • Template模式在Android中的使用

    template模式主要是将不变化的方法放在父类中,再声明一个抽象方法,子类通过实现该抽象方法,达到封装变化的作用.

    其实android也大量的使用template模式,比如view:

    下面用代码示例:

    public class TemplateActivity extends Activity implements OnClickListener ,OnFocusChangeListener{
    public static final String TITLE = "title";

    @Override
    public void setTitle(int titleId) {
    super.setTitle(titleId);
    }

    private MyButton mButton;
    private MyView mView;


    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entry);
    findComponent();
    setOnClickListener();
    setOnFocusChangeListener();

    }

    private void setOnClickListener() {
    mButton.setOnClickListener(
    this);
    mView.setOnClickListener(
    this);
    }


    private void setOnFocusChangeListener() {
    mButton.setOnFocusChangeListener(
    this);
    mView.setOnFocusChangeListener(
    this);
    }

    private void findComponent() {
    mButton
    = (MyButton) this.findViewById(R.id.btn);
    mView
    =(MyView) this.findViewById(R.id.view);

    }

    @Override
    public void onClick(View v) {
    int id = v.getId();
    switch (id) {
    case R.id.btn:
    DebugLog.log(
    "btn onclick");
    break;
    case R.id.view:
    DebugLog.log(
    "view onclick");
    break;
    default:
    break;
    }

    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
    int id = v.getId();
    switch (id) {
    case R.id.btn:
    DebugLog.log(
    "btn onFocusChange");
    break;
    case R.id.view:
    DebugLog.log(
    "view onFocusChange");
    break;
    default:
    break;
    }

    }

    }
    public class DebugLog {
    public final static boolean DEBUG = true;

    public static void log(String message) {
    if (DEBUG) {
    String fullClassName
    = Thread.currentThread().getStackTrace()[3].getClassName();
    String className
    = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
    String methodName
    = Thread.currentThread().getStackTrace()[3].getMethodName();
    int lineNumber = Thread.currentThread().getStackTrace()[3].getLineNumber();

    Log.d(className
    + "." + methodName + "():" + lineNumber, message);
    }
    }


    public static void printThreadId(String message) {
    if (DEBUG) {
    Log.d(message, String.valueOf(Thread.currentThread().getId()));
    }
    }

    public static void log(String tag, String message) {
    if (DEBUG) {
    String methodName
    = Thread.currentThread().getStackTrace()[3].getMethodName();
    int lineNumber = Thread.currentThread().getStackTrace()[3].getLineNumber();

    Log.d(tag
    + "." + methodName + "():" + lineNumber, message);
    }
    }

    public static void printTrace(String message) {
    if (DEBUG) {
    printIllegalArgumentException(
    "", message);
    }
    }

    public static String getStackTrace(Throwable throwable) {
    Writer writer
    = new StringWriter();
    PrintWriter printWriter
    = new PrintWriter(writer);
    throwable.printStackTrace(printWriter);
    return writer.toString();
    }

    public static void printIllegalArgumentException(String tag, String arg) {
    if (DEBUG) {
    final Throwable throwable = new IllegalArgumentException(arg);
    Log.w(tag, arg, throwable);
    }
    }

    }

    

    public class MyView extends View {
    
    	public MyView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    		Paint paint = new Paint();
    		paint.setARGB(255, 255, 0, 0);
    		canvas.drawCircle(100, 100, 100, paint);
    		super.onDraw(canvas);
    	}
    
    	public MyView(Context context) {
    		super(context);
    	}
    
    }
    
    public class MyButton extends Button {
    
    	public MyButton(Context context) {
    		super(context);
    	}
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    		Paint paint = new Paint();
    		paint.setARGB(255, 255, 0, 0);
    		canvas.drawCircle(100, 100, 100, paint);
    		super.onDraw(canvas);
    	}
    
    	public MyButton(Context context, AttributeSet attrs) {
    		super(context, attrs);
    	}
    
    }
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation
    ="vertical"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent"
    >

    <com.fp.app.view.MyButton android:id="@+id/btn"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="wrap_content"
    android:text
    ="click me my button" />
    <com.fp.app.view.MyView android:id="@+id/view"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="wrap_content"
    android:text
    =" click me my view" />
    </LinearLayout>

  • 相关阅读:
    简单的spring--mvc整合
    spring配置mybatis的sqlsessionfactory
    spring配置hibernate的sessionFactory
    spring关于bean的一些配置说明
    采用多个数据源是Spring的配置
    如何将Win10 的环境变量页面设置用在win7上面?
    了解常用的开源机器学习项目
    PyCharm导入tensorflow包报错的问题
    python 结巴分词(jieba)详解
    pylint
  • 原文地址:https://www.cnblogs.com/budoudou/p/2100946.html
Copyright © 2011-2022 走看看