Java基础学习笔记5

(20160111)

【扣丁学堂】


装饰者设计模式:讲了一个以豆浆为主的消费记账系统

主料:豆浆

配料:糖  黑豆  五谷  鸡蛋

之间组合后有纯豆浆,糖豆浆,糖加黑豆豆浆,等等

看视频是跟着写的代码中写了一个接口,然后用两个类去实现,一个类返回(出口),一个类传入参数,

其他的去继承传入参数的类

我在想,既然都有豆浆,那么写一个接口,然后用豆浆类去实现接口,其他的类(如加糖,加鸡蛋)去继承豆浆类不就完了吗,然后在继承后的类中写含参构造函数来传参

如下图所示


视频中跟着敲出的代码如下

Drink.java

package com.molu.decorator;
/**
 * 抽象的被装饰的接口
 * @author Administrator
 *
 */
public interface Drink {
	public String description();
	public float cost();
}

SoyaBeanMilk.java

package com.molu.decorator;

/**
 * 具体的装饰者类
 * @author Administrator
 *
 */
public class SoyaBeanMilk implements Drink {

	@Override
	public String description() {
		// TODO Auto-generated method stub
		return "纯豆浆";
	}

	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return 3f;
	}

	
}

Decorator.java

package com.molu.decorator;
/**
 * 装饰者抽象类
 * 
 */
public class Decorator implements Drink {

	private Drink drink;//要装饰的对象
	 public Decorator(Drink drink) {
		// TODO Auto-generated constructor stub
		 this.drink=drink;
	}
	@Override
	public String description() {
		// TODO Auto-generated method stub
		return drink.description();
	}

	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return drink.cost();
	}
	//

}
EggDecorator.java

package com.molu.decorator;

public class EggDecorator extends Decorator {
	public EggDecorator(Drink drink) {
		// TODO Auto-generated constructor stub
	    super(drink);
	}
	@Override
	public String description() {
		// TODO Auto-generated method stub
		return super.description()+"+鸡蛋";
	}
	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return super.cost()+3f;
	}

}

SugarDecorator.java

package com.molu.decorator;

public class SugarDecorator extends Decorator {
	public SugarDecorator(Drink drink) {
		// TODO Auto-generated constructor stub
	    super(drink);
	}
	@Override
	public String description() {
		// TODO Auto-generated method stub
		return super.description()+"+糖";
	}
	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return super.cost()+0.5f;
	}
}

BlackBeanDecorator.java

package com.molu.decorator;

public class BlackBeanDecorator extends Decorator {
	public BlackBeanDecorator(Drink drink) {
		super(drink);
		// TODO Auto-generated constructor stub
	}
	@Override
	public String description() {
		// TODO Auto-generated method stub
		return super.description()+"+黑豆";
	}
	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return super.cost()+2f;
	}

}
Test.java(测试)

package com.molu.decorator;

public class Test {
	
	public static void main(String[] args) {
		Drink drink=new SoyaBeanMilk();
		SugarDecorator sugar=new SugarDecorator(drink);
		BlackBeanDecorator blackBean=new BlackBeanDecorator(sugar);
		EggDecorator egg=new EggDecorator(blackBean);
		
		System.out.println("早餐是:"+egg.description());
		System.out.println("共花了"+egg.cost());
	}

}



按照自己想法写的

Drin,java

package com.molu.decor;

public interface Drin {
	public String description();
	public float cost();
}

Soya.java

package com.molu.decor;


public class Soya implements Drin {
//	private Soya soya;
	
	@Override
	public String description() {
		// TODO Auto-generated method stub
		return "纯豆浆";
	}

	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return 3f;
	}

}

Egg.java

package com.molu.decor;

public class Egg extends Soya{
	Soya soya;
	public Egg(Soya soya) {
		// TODO Auto-generated constructor stub
		this.soya=soya;
	}
	@Override
	public String description() {
		// TODO Auto-generated method stub
		return this.soya.description()+"+鸡蛋";
	}
	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return this.soya.cost()+3f;
	}

}

Sugar.java

package com.molu.decor;

public class Sugar extends Soya{
	private Soya soya;
	public Sugar(Soya soya) {
		// TODO Auto-generated constructor stub
		this.soya=soya;
	}
	@Override
	public String description() {
		// TODO Auto-generated method stub
		return this.soya.description()+"+糖";
	}
	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return this.soya.cost()+0.5f;
	}

}

Black.java

package com.molu.decor;

public class Black extends Soya {
	Soya soya;
	public Black(Soya soya) {
		// TODO Auto-generated constructor stub
		this.soya=soya;
	}
	@Override
	public String description() {
		// TODO Auto-generated method stub
		return this.soya.description()+"+黑豆";
	}
	@Override
	public float cost() {
		// TODO Auto-generated method stub
		return this.soya.cost()+2f;
	}

}

Tes.java(测试)

package com.molu.decor;


public class Tes {
	public static void main(String[] args) {
		Soya drin=new Soya();
		Egg egg=new Egg(drin);
		Black black=new Black(egg);
		Sugar sugar=new Sugar(black);
		System.out.println("食物:"+sugar.description());
		System.out.println("价格:"+sugar.cost()+"元");
	}

}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值