Android 设计模式第三篇:模板方法模式

Template Method Pattern模板的含义

  所谓模板,有用过VS的朋友会比较熟悉,这个IDE将一些统一的代码编写方法制作成模板加载在IDE里面,开发者可以根据自己制作的模板或者微软提供的模板比如Asp.net 、Winform 、WPF开发等各种模板。而Android 建立项目初期生成的Project 也可以当作是一个模板。它是将原先定义好的东西事先写好了一套规范,具体要如何使用这套规范模板来完成不同的任务,是要看我们的AP开发者不同的实现方法。

  作为模板的方法要定义在父类,而方法的定义中使用到抽象方法。因此如果只看父类部分的程序,根本不知道到底会是怎样处理内容,最多只能了解该如何调用处理抽象方法而已。

  实际实现抽象方法的是子类。要在子类实现方法,才能决定具体的操作。理论上,如果在不同的子类执行不同的实现,应该就能发展出不同的处理内容 。不过无论在哪个子类执行任何一种实现,处理的大致流程都是还要依照父类的制定方式。


程序示例

  此例子定义了三个类一个为抽象类(AbstractDisplay),另外两个为分别实现这个抽象类其中的三个抽象方法,具体的程序示例图见如下:


AbstractDisplay 抽象类

    public abstract class AbstractDisplay {
        public abstract String open();

        public abstract String print();

        public abstract String close();

        public final String display() {
            StringBuffer sb = new StringBuffer();
            sb.append(open());
            for (int i = 0; i < 5; i++) {
                sb.append(print());
            }
            sb.append(close());
            return sb.toString();
        }
    }

该类只实现了方法display 方法,并抽象出open(),print(),close()  这三个方法交子类代为实现。

CharDisplay 类

    public class CharDisplay extends AbstractDisplay {

        private char ch;

        public CharDisplay(char ch) {
            this.ch = ch;
        }

        @Override
        public String close() {
            // TODO Auto-generated method stub
            return ">>";
        }

        @Override
        public String open() {
            // TODO Auto-generated method stub
            return "<<";
        }

        @Override
        public String print() {
            // TODO Auto-generated method stub

            return String.valueOf(ch);
        }

    }

StringDisplay 类

public class StringDisplay extends AbstractDisplay {

    public String string;
    private int width;

    public StringDisplay(String string) {
        this.string = string;
        this.width=string.length() ;
    }

    @Override
    public String close() {
        // TODO Auto-generated method stub
        return printLine();
    }

    @Override
    public String open() {
        // TODO Auto-generated method stub
        return printLine();
    }

    @Override
    public String print() {
        // TODO Auto-generated method stub
        return "|" + string + "|\n";
    }

    private String printLine() {
        StringBuffer sb = new StringBuffer();
         

        for (int i = 0; i < width; i++) {
            sb.append("*");
        }
         
        return sb.toString()+"\n";
    }

}

界面处理代码:

public class TemplatePatternActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        final AbstractDisplay d1=new CharDisplay('H');
        
        final AbstractDisplay d2=new StringDisplay("android pattern");
        
        
        
        Button result=(Button)findViewById(R.id.btn_result);
        
        final EditText et_result=(EditText)findViewById(R.id.result);
        
        result.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                et_result.setText(d1.display()+"\n"+d2.display());
                
                
            }
        });
    }
}

本文转自: http://www.1000phone.net/thread-6789-1-1.html


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值