package _03;
//装饰器模式:分为四大组件
//1.抽象组件:需要装饰的抽象对象和接口
//2.具体组件:需要装饰的对象(Person)
//3.抽象装饰类:对抽象组件的引用,以及装饰者共有的方法
//4.具体装饰类
public class _3_23Decorate {
public static void main(String[] args) {
Person per = new Person();
per.say();
// 实现放大器对声音的放大效果
Amplifer amplifer = new Amplifer(per);
amplifer.say();
Drink coffee = new COFFEE();
Milk milk = new Milk(coffee);
System.out.println(milk.name()+milk.cost());
}
}
interface SAY{
void say();
}
class Person implements SAY{
private int voice =10;
@Override
public void say() {
System.out.println("person's voice:"+voice);
}
public int getVoice() {
return voice;
}
public void setVoice(int voice) {
this.voice = voice;
}
}
class Amplifer implements SAY{
public Person p;
public Amplifer(Person p){
this.p = p;
}
@Override
public void say() {
System.out.println("pperson voice:"+p.getVoice()*100);
}
}
interface Drink{
public double cost();
public String name();
}
class COFFEE implements Drink{
public double COffee_cost = 10;
public String Coffee_name = "NaTie";
@Override
public double cost() {
return this.COffee_cost;
}
@Override
public String name() {
return this.Coffee_name;
}
}
abstract class Decorate implements Drink{
Drink drink;
public Decorate(Drink drink){
this.drink = drink;
}
@Override
public double cost() {
return drink.cost();
}
@Override
public String name() {
return drink.name();
}
}
class Milk extends Decorate{
public Milk(Drink drink) {
super(drink);
}
@Override
public double cost() {
return super.cost()*4;
}
@Override
public String name() {
return super.name()+"add a little milk";
}
}
装饰者模式
最新推荐文章于 2024-08-29 18:44:48 发布