/** * 模板方法模式 * * 实现算法时,整体过程很固定,只有部分易改变 * 则可以将固定的部分提取到父类中实现,由子类实现易变的部分 * * 基本方法: * 1、抽象方法:父类声明,由子类具体实现 * 2、具体方法:父类实现,子类可以根据情况进行覆盖或直接继承 * 3、钩子方法:子类重写的父类方法 * * 优点: * 1、简化了子类的代码,方便维护 * 2、如有特殊情况也可重写父类多个方法,具有一定扩展性 * * 场景: * JDBCTemplate、HibernateTemplate * Junit单元测试、servlet中doGet/doPost */ public class TemplateMethodDemo01 { public static void main(String[] args) { ATMTemplateMethod atm1 = new ATMTemplateMethod(){ @Override public void transact() { System.out.println("取钱"); } }; ATMTemplateMethod atm2 = new ATMTemplateMethod(){ @Override public void transact() { System.out.println("转账"); } }; ATMTemplateMethod atm3 = new ATMTemplateMethod(){ @Override public void transact() { System.out.println("查询余额"); } }; ATMTemplateMethod atm4 = new ATMTemplateMethod(){ @Override public void insertBankCard() {} @Override public void enterPassword() {} @Override public void transact() { System.out.println("无卡存款"); } @Override public void removeTheBankCard() {} }; System.out.println("[路人甲]:"); atm1.process(); System.out.println("[路人乙]:"); atm2.process(); System.out.println("[路人丙]:"); atm3.process(); System.out.println("[路人丁]:"); atm4.process(); } } /** * ATM机模板方法 */ abstract class ATMTemplateMethod{ public void insertBankCard(){ System.out.println("******插入银行卡******"); } public void enterPassword(){ System.out.println("******输 入 密 码******"); } public abstract void transact(); public void removeTheBankCard(){ System.out.println("******取出银行卡******"); } public final void process(){ this.insertBankCard(); this.enterPassword(); this.transact(); this.removeTheBankCard(); } }
/** * */ public class TemplateMethodDemo02 { public static void main(String[] args) { Life l = new Life(){ @Override protected boolean isStrive() { return false; } }; l.lifeTime(); } } abstract class Life{ private static Random r = new Random(); private final int wealth = r.nextInt(3); private int schoolLevel; private int achievement; private int work; public void lifeTime(){ goToSchool(); graduation(); work(); printInfo(); } private void goToSchool(){ switch(wealth){ case 2:{ schoolLevel = 2; break; } case 1:{ if(r.nextInt(100)<1){ schoolLevel = 2; }else{ schoolLevel = 1; } break; } default:{ if(r.nextInt(10)<1){ schoolLevel = 1; }else{ schoolLevel = 0; } break; } } } private void graduation(){ if(isStrive()&&r.nextInt(1000)<1){ achievement = (schoolLevel==2)?2:(schoolLevel+1); }else if(isStrive()){ achievement = schoolLevel; }else{ achievement = (schoolLevel==0)?0:(schoolLevel-1); } } protected boolean isStrive() { return false; } private void work(){ if(wealth==2){ work = 2; }else if(isStrive()&&achievement==1){ work = (r.nextInt(10000)<1)?2:1; }else{ work = 0; } } private void printInfo(){ String bron[] = {"出生在贫困家庭","出生在普通家庭","出生在富裕家庭"}; String school[] = {"在乡村学校上学","在普通学校上学","在重点学校上学"}; String source[] = {"辍学","普通成绩","优秀成绩"}; String work[] = {"农民工","普通职员","少东家"}; System.out.println(bron[wealth]); System.out.println(school[schoolLevel]); System.out.println(source[achievement]); System.out.println(work[this.work]); System.out.println("[我编不下去了....]"); } }
相关推荐
初级程序员可以学习设计模式的基本概念和应用,高级程序员能够从书中掌握更多高级技巧,而系统分析师可以通过设计模式来解决项目中遇到的复杂问题。 总体而言,设计模式是软件工程领域的宝贵财富,而《JAVA设计模式...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。...无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的专业技能。
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书...综上所述,本书不仅是一本关于设计模式的入门书,也是对设计模式应用的深入探讨,无论是对于初级开发者、高级程序员,还是系统分析师,都能从中获得价值。
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
对于不同级别的开发者,学习设计模式的方法有所不同: - **初学者**:通过积累具体的案例来学习,而不是仅仅记住类图。 - **初级开发人员**:多思考、多梳理,并尝试归纳总结。 - **中级开发人员**:在实际项目中...
设计模式是软件工程中解决常见问题的模板或通用解决方案,Java设计模式是这些解决方案在Java语言中的具体实现。《java23种设计模式详细讲解》这本书系统地介绍了23种设计模式,并通过具体的例子来阐释每种模式的应用...
Gang of Four)的经典著作《设计模式:可复用面向对象软件的基础》中的分类,包括创建型模式(如工厂模式、抽象工厂模式、单例模式等)、结构型模式(如适配器模式、桥接模式、装饰模式等)和行为型模式(如策略模式...
- **软件设计模式**:指在软件开发过程中遇到特定问题时可以重复使用的解决方案模板。它们是经验的总结,可以帮助开发者更好地组织代码,提高软件的可维护性和扩展性。 #### 二、JavaScript语言特性与设计模式的...
设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决问题的常见方法,使得开发者可以复用这些解决方案,提高代码质量,降低维护成本。下面将深入探讨设计模式的重要性和其在实际开发中的应用。 设计...
- **其他技能**: 设计模式、算法、网络协议等。 #### 三、工作经历撰写技巧 - **关键要素**: - **时间范围**: 明确标注工作起始时间和结束时间(如2021.07~至今)。 - **职位及公司名称**: 如“XXXXX科技有限...
设计模式是软件工程中一种被广泛认可的解决问题的方法论,它提供了一系列经过验证的模板,用于解决软件设计中的重复出现的问题。在Java开发中,设计模式尤为重要,因为它们能够帮助开发者构建出结构清晰、可维护和可...
设计模式是软件工程中,为了解决特定问题而形成的一种通用、可重复使用的解决方案模板。在软件开发中,设计模式为开发者提供了一套经过时间考验的最佳实践。本文详细介绍了23种常用的设计模式,并配以历史与现代的...