绪论
其实很早以前就看过一些关于设计模式的文章,知道这个很重要,为此还写了一些demo,但是在实际开发过程中基本没有使用过。原因:不习惯,不记得,其实更多的是不明白什么情况下可以使用。所以导致自己的代码又臭又长,还会重复的造一些轮子,使代码看起来毫无亮点。
这次学习设计模式,更多的是分析理解,思考以往编程中哪些地方可以用到这些模式,从而可以使以后的自己在开发相同模块时可以使用。
理解
- 结构型模式。
- 基本概念:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
- 现有类的一个包装类,在保证原有的前提下,提供额外的功能。
- 优点:可独立发展,不会相互耦合。若有多个被装饰类,想扩展同样功能,可使用一个装饰类,提高开发效率。
- 缺点:多层装饰比较复杂。
代码
AudiCar.java
public class AudiCar implements Car {
@Override
public void carName() {
System.out.println("车辆名称:奥迪");
}
}
BlackDecorator.java
public class BlackDecorator extends Decorator {
public BlackDecorator(Car car) {
super(car);
}
@Override
public void carName() {
if (this.car != null) {
super.carName();
System.out.println("车辆颜色:黑色\n");
}
}
}
BMWCar.java
public class BMWCar implements Car {
@Override
public void carName() {
System.out.println("车辆名称:宝马");
}
}
Car.java
public interface Car {
void carName();
}
Decorator.java
public class Decorator implements Car{
protected Car car = null;
public Decorator (Car car) {
this.car = car;
}
@Override
public void carName() {
car.carName();
}
}
Main.java
public class Main {
public static void main(String[] args) {
BlackDecorator bmw = new BlackDecorator(null);
bmw.carName();
BlackDecorator audi = new BlackDecorator(new AudiCar());
audi.carName();
}
}
结果
可以对日志进行封装,实现原有方法,按照我们需要的格式进行输出。可以参考
(若有什么错误,请留言指正,3Q)
来源:https://blog.csdn.net/qq_39237801/article/details/85259650