大话设计模式5 模版模式 外观模式
2013-01-24 20:09
295 查看
1.模版模式
今天看到了一个很不错的模式:模版模式,由父类定义好逻辑结构,但是其中一些具体的细节留给子类去实现。使子类可以不必改变具体的逻辑结构,就可以重新定义细节。
一个关于考试答题的简单例子:
对同样的一套试卷回答问题,stuA和stuB可以按照试题顺序回答不同的答案。
2.外观模式
给子系统中一组接口提供统一的界面。
据说在维护大型复杂系统时,此模式很有用,通过对复杂系统中的接口分类,借助外观模式,能够使接口简洁明了。
感觉和代理模式有点像,但可能一个侧重于统一提供接口;一个侧重于使两个模块分离,不直接交互吧。
一个关于投资的例子,将股票,国债,房地产的buy,sell接口统一起来操作。
今天看到了一个很不错的模式:模版模式,由父类定义好逻辑结构,但是其中一些具体的细节留给子类去实现。使子类可以不必改变具体的逻辑结构,就可以重新定义细节。
一个关于考试答题的简单例子:
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(); } }
相关文章推荐
- 笔记-大话设计模式-12 外观模式
- 《大话设计模式》--外观模式
- 大话设计模式,让你的代码更完美6---模版方法模式/迪米特
- 大话设计模式之外观模式
- 大话设计模式(Python版)--外观模式
- 大话设计模式-----(四)迪米特法则、外观模式、建造者模式
- 《大话设计模式》之--第12章 牛市股票还会亏钱?----外观模式
- 《大话设计模式》java实现之模版方法模式
- 《大话设计模式》--牛市股票还会亏钱?--外观模式<Facade>(12)
- 大话设计模式——外观模式(C++顾客抵押系统)
- 读《大话设计模式》---外观模式(Facade)
- 大话设计模式学习(九)——外观模式
- 大话设计模式之外观模式
- 大话设计模式 - 外观(Facade)模式
- 大话设计模式----外观模式
- 《大话设计模式》java实现之外观模式
- 大话设计模式-第12章 牛市股票还会亏钱?--外观模式
- 2009-05-03读书记录:《大话设计模式》第十二章——外观模式
- 大话设计模式读后感之外观模式
- 大话设计模式C++实现-第12章-外观模式