package cn.jbit.lesson.decorator;
/**
* 装饰器
* 1.抽象组件:需要装饰的抽象对象(接口或抽象父类)
* 2.具体组建:需要装饰的对象
* 3.抽象装饰类:包含抽象组件的引用以及装饰者共有的方法
* 4.具体装饰类:被装饰的对象
* @author MacBook
*
*/
public class DecorateTest {
public static void main(String[] args) {
//实例化对象
Attribute coffee = new Coffee();
Attribute suger =new Suger(coffee);//装饰
System.out.println(suger.cname()+"--->"+suger.cost());
Attribute milk = new Milk(suger);
System.out.println(milk.cname()+"--->"+milk.cost());
}
}
//模拟咖啡
/**
* 1.抽象组件
* 咖啡都有名字和费用
* @author MacBook
*
*/
interface Attribute{
String cname();//名字
double cost();//费用
}
/**
* 2.具体组件:咖啡就是需要装饰的具体对象
*/
class Coffee implements Attribute{
//我们是对原味咖啡进行装饰
private String name = "原味咖啡";
@Override
public String cname() {
// TODO Auto-generated method stub
return name;
}
@Override
public double cost() {
// TODO Auto-generated method stub
return 10;
}
}
/**
* 3.抽象装饰器:包含抽象组件的引用和装饰者共有的方法
*/
abstract class Decorate implements Attribute{
//对抽象组件的引用
public Attribute attribute;
/**
* 构造方法
*/
public Decorate(Attribute attribute) {
this.attribute=attribute;
}
@Override
public String cname() {
// TODO Auto-generated method stub
return this.attribute.cname();
}
@Override
public double cost() {
// TODO Auto-generated method stub
return this.attribute.cost();
}
}
/**
* 4.具体装饰类
* @author MacBook
*
*/
class Milk extends Decorate{
public Milk(Attribute attribute) {
super(attribute);
// TODO Auto-generated constructor stub
}
@Override
public String cname() {
// TODO Auto-generated method stub
return super.cname()+"加了牛奶";
}
@Override
public double cost() {
// TODO Auto-generated method stub
return super.cost()*4;
}
}
/**
* 4.具体装饰类
* @author MacBook
*
*/
class Suger extends Decorate{
public Suger(Attribute attribute) {
super(attribute);
// TODO Auto-generated constructor stub
}
@Override
public String cname() {
// TODO Auto-generated method stub
return super.cname()+"加了糖";
}
@Override
public double cost() {
// TODO Auto-generated method stub
return super.cost()*2;
}
}
java装饰器
猜你喜欢
转载自blog.csdn.net/qq_43287650/article/details/83818846
今日推荐
周排行