目录
装饰器的组成
1.抽象组件:需要装饰的抽象对象(接口或抽象父类)
2.具体组件:需要装饰的对象(被装饰者)
3.抽象装饰类:包含抽象组件的引用和装饰类共有的方法
4.具体装饰类:用于装饰的类
装饰器简单使用
扩音器代码
package cn.sxt.IO02;
/*
* 实现扩音器,对人的声音放大
*/
public class Decreat_test01 {
public static void main(String[] args) {
Person p =new Person();
p.say();
amply a=new amply(p);
a.say();
}
}
interface say {//
void say();
}
class Person implements say{
private int voice=10;
public void say() {
System.out.println("人的声音"+this.voice);
}
public int getVoice() {
return voice;
}
//get方法
public void setVoice(int voice) {
this.voice = voice;
}
}
class amply implements say{
private Person p;
public amply(Person p) {
this.p=p;
}
public void say() {
System.out.println("扩音后"+p.getVoice()*100);
}
}
咖啡代码
package cn.sxt.IO02;
/*
* 装饰咖啡
*
* 1.抽象组件:需要装饰的抽象对象(接口或抽象父类)
2.具体组件:需要装饰的对象(被装饰者)
3.抽象装饰类:包含抽象组件的引用和装饰类共有的方法
4.具体装饰类:用于装饰的类
*/
public class Decreat_test02 {
public static void main(String[] args) {
Drink coffed=new Coffe();
Drink milkcoffee=new Milk(coffed);
Drink sugercoffe =new Suger(milkcoffee);
System.out.println(coffed.info()+coffed.price());
System.out.println(milkcoffee.info()+milkcoffee.price());
System.out.println(sugercoffe.info()+sugercoffe.price());
}
}
//抽象组件
interface Drink{
double price();
String info();
}
//具体组件
class Coffe implements Drink{
private String name="原味咖啡";
public double price() {
return 20;
}
public String info() {
return name;
}
}
//抽象装饰类
abstract class Decreat implements Drink{
private Drink drink;
public Decreat(Drink drink) {
super();
this.drink = drink;
}
@Override
public double price() {
return this.drink.price();
}
public String info() {
return this.drink.info();
}
}
class Milk extends Decreat{
public Milk(Drink drink) {
super(drink);
}
public double price() {
return super.price()*2;
}
@Override
public String info() {
return super.info()+"加了牛奶";
}
}
class Suger extends Decreat{
public Suger(Drink drink) {
super(drink);
}
public double price() {
return super.price()*3;
}
@Override
public String info() {
return super.info()+"加了唐";
}
}