
概述
- 装饰的作用:不改变原来的代码,就可以实现新的功能
- GOF设计模式:设计复杂代码时用到的高内聚低耦合的方法论。
1、抽象组件(接口、抽象父类):需要装饰的抽象对象
2、具体组件:要装饰的对象
3、抽象装饰类:包含了对抽象组件的引用,以及装饰着共有的方法
4、具体装饰类:被装饰的对象
1、实现一个放大器
主程序
public static void main(String[] args) {
Person p = new Person();
p.say();
//装饰
Amplifier am = new Amplifier(p);
am.say();
}
interface Say{
void say();
}
}
人
class Person implements Say{
//属性:
private int voice = 10;
@Override
public void say() {
System.out.println("人的声音为:"+this.getVoice());
}
public int getVoice() {
return voice;
}
public void setVoice(int voice) {
this.voice = voice;
}
}
扩音器(放大器)
class Amplifier implements Say{
private Person p; //对人的装饰
//什么时候装饰,加入构造器中
Amplifier(Person p){
this.p=p;
}
public void say() {
System.out.println("人的声音为:"+p.getVoice()*100);
System.out.println("噪音!!!");
}
}
结果

2、模拟咖啡
主程序
public static void main(String[] args) {
Drink coffee = new Coffee();
Drink suger = new Suger(coffee); //装饰
System.out.println(suger.info()+"-->"+suger.cost());
Drink milk = new Milk(coffee); //装饰
System.out.println(milk.info()+"-->"+milk.cost());
//再混合
milk = new Milk(suger); //装饰
System.out.println(milk.info()+"-->"+milk.cost());
}
抽象组件
interface Drink{
double cost(); //费用
String info(); //说明
}
具体组件
class Coffee implements Drink{
private String name = "原味咖啡";
@Override
public double cost() {
return 10;
}
@Override
public String info() {
return name;
}
}
抽象装饰类
abstract class Decorate implements Drink{
//对抽象组件的应用
private Drink drink;
public Decorate(Drink drink){
this.drink = drink;
}
@Override
public double cost() {
return this.drink.cost();
}
@Override
public String info() {
return this.drink.info();
}
}
具体抽象类
class Milk extends Decorate{
public Milk(Drink drink) {
super(drink);
}
//对它们重写
@Override
public double cost() {
return super.cost()*4;
}
@Override
public String info() {
return super.info()+"加入了牛奶";
}
}
class Suger extends Decorate{
public Suger(Drink drink) {
super(drink);
}
//对它们重写
@Override
public double cost() {
return super.cost()*2;
}
@Override
public String info() {
return super.info()+"加入了蔗糖";
}
}
结果

通过两个案例的实践,不难发现,其实装饰器模式体现的就是类与类之间的关系,赋予了源码新的功能。
博客介绍了装饰器模式,其作用是不改变原代码实现新功能,还提及GOF设计模式。通过实现放大器和模拟咖啡两个案例,展示了抽象组件、具体组件、抽象装饰类和具体装饰类的应用,体现了装饰器模式中类与类的关系及赋予源码新功能的特点。
1451

被折叠的 条评论
为什么被折叠?



