`
donald3003a
  • 浏览: 64419 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
  • 淼淼E馒头: 这举列有点不恰当啊。。电影人和不同类型的电影。是两个不同概念 ...
    合成模式

装饰模式

阅读更多
装饰模式 就是给一个类添加其他的功能。这个模式跟代理模式相当的相识。
看代码
1、基础接口
public interface Phone {

	public void call();
}


2、要装饰的类
	@Override
	public void call() {
		System.out.println("It's only call");
	}

3、装饰类

public abstract class MobileTelephone {
	private final Phone phone;

	public MobileTelephone(Phone phone) {
		this.phone = phone;
	}

	protected void call() {
		phone.call();
	}

}


4、第1个装饰的功能
public class MoveFunction extends MobileTelephone {

	public MoveFunction(Phone phone) {
		super(phone);
	}

	@Override
	protected void call() {
		super.call();
		System.out.println("It can move");
	}

}



5、第2个装饰的功能
public class SMSFunction extends MobileTelephone {

	public SMSFunction(Phone phone) {
		super(phone);
	}

	@Override
	protected void call() {
		super.call();
		System.out.println("It can sms");
	}

}

6、main类
public class Main {

	public static void main(String[] args) {
		Phone phone = new FixedTelephone();
		phone.call();
		MobileTelephone mobileTelephone = new SMSFunction(phone);
		mobileTelephone.call();
		MobileTelephone moveFunction = new MoveFunction(phone);
		moveFunction.call();
	}
}

这个模式跟代理模式的不同一个在于结构的设计,一个在于行为的实现。这是本质的差异以后会具体说代理模式。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics