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();
}
}