您的位置:首页 > 其它

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

2013-01-24 20:09 295 查看
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();
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: