Java设计模式:装饰器模式

只谈情不闲聊 提交于 2019-11-28 16:15:59

绪论

其实很早以前就看过一些关于设计模式的文章,知道这个很重要,为此还写了一些demo,但是在实际开发过程中基本没有使用过。原因:不习惯,不记得,其实更多的是不明白什么情况下可以使用。所以导致自己的代码又臭又长,还会重复的造一些轮子,使代码看起来毫无亮点。
这次学习设计模式,更多的是分析理解,思考以往编程中哪些地方可以用到这些模式,从而可以使以后的自己在开发相同模块时可以使用。

理解

  1. 结构型模式。
  2. 基本概念:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
  3. 现有类的一个包装类,在保证原有的前提下,提供额外的功能。
  4. 优点:可独立发展,不会相互耦合。若有多个被装饰类,想扩展同样功能,可使用一个装饰类,提高开发效率。
  5. 缺点:多层装饰比较复杂。

代码

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)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!