大话设计模式5 模版模式 外观模式

来源:互联网 发布:maka是什么软件 编辑:程序博客网 时间:2024/04/30 14:00

1.模版模式

今天看到了一个很不错的模式:模版模式,由父类定义好逻辑结构,但是其中一些具体的细节留给子类去实现。使子类可以不必改变具体的逻辑结构,就可以重新定义细节。

一个关于考试答题的简单例子:

abstract class TestPaper{    public void question1()    {        System.out.println("Question1 Answer:"+answer1());    }    public abstract String answer1();        public void question2()    {        System.out.println("Question2 Answer:"+answer2());    }        public abstract String answer2();}class StudentA extends TestPaper{    @Override    public String answer1() {        // TODO Auto-generated method stub        return "A";    }    @Override    public String answer2() {        // TODO Auto-generated method stub        return "A";    }}class StudentB extends TestPaper{    @Override    public String answer1() {        // TODO Auto-generated method stub        return "B";    }    @Override    public String answer2() {        // TODO Auto-generated method stub        return "B";    }}public class Template {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        StudentA stuA=new StudentA();        stuA.question1();        stuA.question2();                StudentB stuB=new StudentB();        stuB.question1();        stuB.question2();    }}

对同样的一套试卷回答问题,stuA和stuB可以按照试题顺序回答不同的答案。


2.外观模式

给子系统中一组接口提供统一的界面。

据说在维护大型复杂系统时,此模式很有用,通过对复杂系统中的接口分类,借助外观模式,能够使接口简洁明了。

感觉和代理模式有点像,但可能一个侧重于统一提供接口;一个侧重于使两个模块分离,不直接交互吧。

一个关于投资的例子,将股票,国债,房地产的buy,sell接口统一起来操作。

class Stock{    public void buy()    {        System.out.println("Stock buy");    }        public void sell()    {        System.out.println("Stock sell");    }}class NationalDebt{    public void buy()    {        System.out.println("NationalDebt buy");    }        public void sell()    {        System.out.println("NationalDebt sell");    }}class Realty{    public void buy()    {        System.out.println("Realty buy");    }        public void sell()    {        System.out.println("Realty sell");    }}public class Facade {    Stock mStock;    NationalDebt mNationalDebt;    Realty mRealty;        public Facade()    {        mStock=new Stock();        mNationalDebt=new NationalDebt();        mRealty=new Realty();    }        public void buy()    {        mStock.buy();        mNationalDebt.buy();        mRealty.buy();    }        public void sell()    {        mStock.sell();        mNationalDebt.sell();        mRealty.sell();    }    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        Facade facade=new Facade();        facade.buy();        facade.sell();    }}



原创粉丝点击