我所理解的设计模式之Java装饰模式

快要毕业了,之前学习的设计模式没有想到这么重要,马马虎虎就应付过去了,现在重新学习一下。

在这里写一下自己所理解的装饰模式,语言不多,看代码吧……

package decorator;





/**

 * User.java

 * 定义一个接口,规定好一个方法,以后所有的类都去实现或重写这个方法

 * @author sztsiang

 *

 */

public interface User {



	void show();

}

 

package decorator;



/**

 * Person.java

 * 这里可以用一个具体的对象来实现上面的User接口

 * 此对象好比论坛里面的用户

 * @author sztsiang

 *

 */

public class Person implements User {



	@Override

	public void show() {



		System.out.println("sing a song");

	}



}

 

package decorator;



/**

 * DoOtherThing.java

 * 定义装饰类的实现,以后所有的装饰类都来继承此类来实现装饰

 * 当然,该类也要实现User接口,因为此类内部的User user即可以是一个具体的Person

 * 也可以是一个具体的装饰类

 * @author sztsiang

 *

 */

public class DoOtherThing implements User {



	private User user;

	public DoOtherThing(User user){

		this.user = user;

	}

	@Override

	public void show() {

		user.show();

	}



}

 下面来写装饰类:

跳舞

package decorator;



/**

 * Dancing.java

 * 一个具体的装饰类,继承自DoOtherThing

 * 功能为Person添加一个跳舞的状态

 * @author sztsiang

 *

 */

public class Dancing extends DoOtherThing {



	public Dancing(User user){

		super(user);

	}



	public void show(){

		super.show();

		doDancing();

	}

	public void doDancing(){

		System.out.println("with dancing");

	}

}

 手拿鲜花

package decorator;



/**

 * HandlingFlowers.java

 * 同样继承自DoOtherThing

 * 该类实现为Person添加手拿鲜花的状态

 * @author sztsiang

 *

 */

public class HandlingFlowers extends DoOtherThing {



	public HandlingFlowers(User user) {

		super(user);

	}



	public void show(){

		super.show();

		doHandlingFlowers();

	}

	

	public void doHandlingFlowers(){

		System.out.println("and handling flowers");

	}

}

 main方法里面:

package decorator;



/**

 * MainTest.java

 * 测试类

 * @author sztsiang

 *

 */

public class MainTest {



	public static void main(String[] args) {



		

		Person p = new Person();//声明一个用户,里面自带唱歌功能

		Dancing d = new Dancing(p);//给用户添加跳舞状态

		HandlingFlowers hf = new HandlingFlowers(d);//给用户添加手拿鲜花状态

		hf.show();//展示一下

	}



}

运行结果:

sing a song
with dancing
and handling flowers

 

 

 

声明:此文章只是个人理解,请批评心态阅读,防止误导,如有错误,请指出,谢谢

[email protected]

你可能感兴趣的:(java)