模板方法模式,策略模式

本文通过两个具体的例子介绍了两种设计模式:策略模式和模板方法模式。策略模式示例为不同人群购买电影票时应用不同的折扣策略;模板方法模式示例则是根据不同人的选择提供多样化的就餐流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1策略模式:

实现一个程序,电影票打折,老人,小孩各有不同的折扣看电影。

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		People p =new OldPeople("老人");
		p.buyTickets();
		p.getDiscount(new DiscontOf5());
	}

}

interface Discount{
	public void discountWay();
}

class DiscontOf7 implements Discount{
	public void discountWay(){
		System.out.println("电影票打七折");
	}
}

class DiscontOf5 implements Discount{
	public void discountWay(){
		System.out.println("电影票打五折");
	}
}

class DiscontOf8 implements Discount{
	public void discountWay(){
		System.out.println("电影票打八折");
	}
}

abstract class People{
	private String typePeople;
	private Discount discount;
	
	public People(String typePeople){
		this.typePeople=typePeople;
	}
	
	public void getDiscount(Discount discount){
		discount.discountWay();
	}
	
	public void buyTickets(){
		System.out.println(typePeople+"买票看电影!");
	}
}

class OldPeople extends People{
	public OldPeople(String typePeople){
		super(typePeople);
	}	
}
2:模板方法模式

实现一个程序,去饭店吃饭,选择各种不同的套餐。

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PersonTreat personA=new PersonA("张三");
		personA.treat();
		personA.dishes();
		personA.payment();
	}

}

abstract class PersonTreat{
	protected String name;

	public void treat(){
		System.out.println(name+"要请客吃饭");
	}
	
    public void dishes(){
    	switch (change()) {
		case 1:
			System.out.println("点的菜有:宫保鸡丁,红烧排骨。。。。。");
			break;
		case 2:
			System.out.println("点的菜有:鱼香肉丝,铁板鱿鱼。。。。。");
			break;
		case 3:
			System.out.println("点的菜有:碳烤活鱼,水煮鱼片。。。。。");
			break;
        
		default:
			System.out.println("不知道怎么选择。");
			break;
		}
    	
    }
    
    public void payment(){
		System.out.println(name+"结账");
	}
    
    abstract int change();
}

class PersonA extends PersonTreat{
	public PersonA(String name) {
		this.name=name;
	}

	public int change(){
		Random r =new Random();
		int a =r.nextInt(3)+1;
		return a;
	}
   	
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值