`
duolaaqian
  • 浏览: 14094 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

[初级]设计模式--模板方法模式

阅读更多

 

/**
 * 模板方法模式
 * 
 * 实现算法时,整体过程很固定,只有部分易改变
 * 则可以将固定的部分提取到父类中实现,由子类实现易变的部分
 * 
 * 基本方法:
 * 	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语言中的应用(pdf)

    《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。...无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的专业技能。

    研磨设计模式-part2

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    研磨设计模式-part4

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    研磨设计模式-part3

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书...综上所述,本书不仅是一本关于设计模式的入门书,也是对设计模式应用的深入探讨,无论是对于初级开发者、高级程序员,还是系统分析师,都能从中获得价值。

    研磨设计模式(完整带书签).part2.pdf

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    C/C++设计模式基础教程

    对于不同级别的开发者,学习设计模式的方法有所不同: - **初学者**:通过积累具体的案例来学习,而不是仅仅记住类图。 - **初级开发人员**:多思考、多梳理,并尝试归纳总结。 - **中级开发人员**:在实际项目中...

    java23种设计模式详细讲解

    设计模式是软件工程中解决常见问题的模板或通用解决方案,Java设计模式是这些解决方案在Java语言中的具体实现。《java23种设计模式详细讲解》这本书系统地介绍了23种设计模式,并通过具体的例子来阐释每种模式的应用...

    java设计模式的 3本书 1 ppt

    Gang of Four)的经典著作《设计模式:可复用面向对象软件的基础》中的分类,包括创建型模式(如工厂模式、抽象工厂模式、单例模式等)、结构型模式(如适配器模式、桥接模式、装饰模式等)和行为型模式(如策略模式...

    JS设计模式与开发实践

    - **软件设计模式**:指在软件开发过程中遇到特定问题时可以重复使用的解决方案模板。它们是经验的总结,可以帮助开发者更好地组织代码,提高软件的可维护性和扩展性。 #### 二、JavaScript语言特性与设计模式的...

    程序员简历模板-前端简历模板框架

    - **其他技能**: 设计模式、算法、网络协议等。 #### 三、工作经历撰写技巧 - **关键要素**: - **时间范围**: 明确标注工作起始时间和结束时间(如2021.07~至今)。 - **职位及公司名称**: 如“XXXXX科技有限...

    研磨设计模式PDF

    设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决问题的常见方法,使得开发者可以复用这些解决方案,提高代码质量,降低维护成本。下面将深入探讨设计模式的重要性和其在实际开发中的应用。 设计...

    java开发设计模式

    设计模式是软件工程中一种被广泛认可的解决问题的方法论,它提供了一系列经过验证的模板,用于解决软件设计中的重复出现的问题。在Java开发中,设计模式尤为重要,因为它们能够帮助开发者构建出结构清晰、可维护和可...

Global site tag (gtag.js) - Google Analytics