设计模式简介
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
装饰器模式(Decorator Pattern)
允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
优点: 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
缺点: 多层装饰比较复杂。
实现
定义一个动物接口,只有say方法。
public interface Animal {
public void say();
}
实现接口:
public class Tiger implements Animal{
public void say() {
System.out.println("我是大老虎");
}
}
public class Wolf implements Animal{
@Override
public void say() {
System.out.println("我是大灰狼");
}
}
新建装饰者抽象类,继承动物类,并添加一个新的方法
public abstract class AnimalDecorator implements Animal{
Animal animal;
public AnimalDecorator(Animal animal) {
this.animal = animal;
}
public void say() {
this.animal.say();
};
public abstract void eat();
}
一个继承抽象类的实体类,并重写再抽象类的抽象方法
public class AnimalDecoratorEntity extends AnimalDecorator{
public AnimalDecoratorEntity(Animal animal) {
super(animal);
}
public void say() {
this.animal.say();
eat();
}
public void eat() {
System.out.println("我吃肉");
}
}
再main方法中看一下没实现装饰者与实现后:
public static void main(String[] args) {
new Tiger().say();
System.out.println("=================");
new AnimalDecoratorEntity(new Tiger()).say();
}
结构:
我是大老虎
=================
我是大老虎
我吃肉