23种设计模式
装饰者模式
概述
在不改变原有对象的情况下,对其进行增强,装饰者模式有以下几个角色
1,抽象被装饰者
2,具体的被装饰者,实现抽象被装饰者,
3,抽象装饰者,实现抽象被装饰者
4,具体的装饰者,继承抽象装饰者
案例说明
场景:
假如商城有台电脑(Computer),买回来原装的(OriginalComputer),用鲁大师测试了下跑分17万分
感觉不太够用,这时候我想对电脑进行增强,加装固态硬盘SSD(DecorateSSD)和加内存RAM(DecorateRAM)
下面是案例的UML类图,
1,抽象被装饰者:Computer
2,具体的被装饰者:OriginalComputer
3,抽象装饰者:Decorate
4,具体的装饰者:DecorateSSD和DecorateRAM
代码
1,抽象被装饰者:Computer
public interface Computer {
int originScore=170000;
int score();
int add(int count);
}
2,具体被装饰者:OriginalComputer
public class OriginalComputer implements Computer{
@Override
public int score() {
return originScore;
}
@Override
public int add(int count) {
return 0;
}
}
3,抽象装饰者:Decorate
public class Decorate implements Computer{
private Computer computer;
public Decorate(Computer computer) {
this.computer = computer;
}
@Override
public int score() {
return computer.score();
}
@Override
public int add(int count){
int originScore = this.score();
int newScore = originScore + count;
return newScore;
}
}
4,具体的装饰者1:DecorateSSD
public class DecorateRAM extends Decorate {
public DecorateRAM(Computer computer) {
super(computer);
}
}
具体的装饰者2:DecorateRAM
public class DecorateSSD extends Decorate{
private Computer computer;
public DecorateSSD(Computer computer) {
super(computer);
}
}
5,测试电脑跑分
public class TestComputerScore {
public static void main(String[] args) {
Computer computer = new OriginalComputer();
int score = computer.score();
System.out.printf("------原装电脑跑分为:%d分------\n", score);
Computer decorate1 = new DecorateRAM(computer);
int newScore1 = decorate1.add(40000);
System.out.printf("------加装RAM内存条跑分为:%d分------\n", newScore1);
Computer decorate2 = new DecorateSSD(computer);
int newScore2 =decorate2.add(50000);
System.out.printf("------加装SSD固态硬盘跑分为:%d分------\n", newScore2);
}
}
输出
------原装电脑跑分为:170000分------
------加装RAM内存条跑分为:210000分------
------加装SSD固态硬盘跑分为:220000分------
总结:
主要有四个角色,理解四个角色以及UML类图,然后结合实际场景如我想对原装电脑进行加强,通过加RAM和SSD方式进行升级,把现实中的对象转化成UML类图中的对象。