设计模式之装饰模式

来源:互联网 发布:u盘检测工具 知乎 编辑:程序博客网 时间:2024/06/07 05:29

描述:记得小学每次看完试,老师就会要求我们拿着成绩单找家长签名,成绩考的好的学生虚荣心得到无限满足,不过成绩差的学生就倒霉了,每次家长看到成绩单就会被教育或者是挨骂,都已经习以为常了。有什么办法能使成绩差的学生能够摆脱这种现状呢,答案当然是肯定,用设计模式中的装饰模式就能实现这个愿望。装饰模式可以这样理解,学生找家长签字,家长看的无非就那几个数字,只要在数字前面或者后面添加一些内容(这里称为装饰者),比如班里最高成绩,最差成绩之类的。添加后的成绩单拿给家长看那效果肯定是不一样的,或许还能得到家长的鼓励。

UML类图如下:



图中的Component代表原有成绩单,Decorator代表需要添加的内容。


测试代码:

1、成绩单接口类

package com.java.decorator;public abstract class Component {public abstract void operate();}

2、成绩单接口实现类

package com.java.decorator;import java.util.ArrayList;import java.util.List;public class ConcreteComponent extends Component {private List<String> list = new ArrayList<String>();public void addDecorator(String str){if(list == null){list = new ArrayList<String>();}list.add(str);}public List<String> getList() {return list;}public void setList(List<String> list) {this.list = list;}@Overridepublic void operate() {if(list != null && list.size() > 0){for(String str : list){System.out.println(str);}}System.out.println("这次期末开始,小明数学成绩75,语文60");}}

3、装饰接口类

package com.java.decorator;public interface Decorator {public String operate();}

4、装饰接口实现类

package com.java.decorator;public class ConcreteDecorator1 implements Decorator {private ConcreteComponent conponent;public ConcreteDecorator1(ConcreteComponent conponent) {this.conponent = conponent;conponent.getList().add(operate());}@Overridepublic String operate() {return "这次期末考试数学最高分85,语文最高分80";}}
package com.java.decorator;public class ConcreteDecorator2 implements Decorator {private ConcreteComponent component;public ConcreteDecorator2(ConcreteComponent component) {this.component = component;component.getList().add(operate());}@Overridepublic String operate() {return "这次考试成绩数学排名第30名,语文第38名";}}

5、测试类

package com.java.decorator;public class DecoratorTest {public static void main(String[] args) {ConcreteComponent component = new ConcreteComponent();ConcreteDecorator1 decorator1 = new ConcreteDecorator1(component);ConcreteDecorator2 decorator2 = new ConcreteDecorator2(component);component.operate();}}

6、测试结果

这次期末考试数学最高分85,语文最高分80这次考试成绩数学排名第30名,语文第38名这次期末开始,小明数学成绩75,语文60




0 0
原创粉丝点击