现在的位置: 首页 > 综合 > 正文

设计模式-装饰模式

2014年09月05日 ⁄ 综合 ⁄ 共 1429字 ⁄ 字号 评论关闭
       最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。

       今天先介绍一下装饰模式。

概念: 

         动态的给某个类添加新的功能。当需要为某个现有的对象动态的增加一个新的功能或职责时,可以考虑使用装饰模式;当然可以通过派生类继承解决上述动态添加功能,但子类膨胀的速度过快,难以控制,往往不可取。

 

流程:

    (1)    抽象构建角色(Component):给出一个抽象的接口,以规范准备接受附加责任的对象。

    (2)    具体构建角色(ConcreteComponent):定义一个将要接受附加责任的类。

    (3)    装饰角色(Decorator):持有一个抽象构建(Component)角色的引用,并定义一个与抽象构件一致的接口。

    (4)    具体装饰角色(ConcreteDecorator):负责给构建对象“贴上”附加的责任。     

示例代码
    下面是一段关于装饰模式的代码:
package Pattern;

/*
 * 抽象构建角色
 */
interface Component {
	public void DoSomething();
}

/*
 * 具体的构建角色
 */
class ConcreteComponent implements Component {
	public void DoSomething() {
		System.out.println("完成原有功能");
	}
}

/*
 * 装饰角色
 */
class Decorator implements Component {
	private Component myComponent;

	public Decorator(Component tmpComponent) {
		this.myComponent = tmpComponent;
	}

	public void DoSomething() {
		myComponent.DoSomething();
	}
}

/*
 *  具体装饰角色
 */
class ConcreteDecorator extends Decorator {
	public ConcreteDecorator(Component tmpComponent) {
		super(tmpComponent);
	}

	private void DoAnotherthing() {
		System.out.println("完成添加功能");
	}

	public void DoSomething() {
		super.DoSomething();
		DoAnotherthing();
	}
}

public class Pattern {
	public static void main(String[] args) {
		try {
			Component component = new ConcreteDecorator(new ConcreteComponent());
			 component.DoSomething();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

           每个人写博客的习惯不一样,上面是我的读书笔记,可能有摘自其他博客http://www.cnblogs.com/hnrainll/archive/2012/03/23/2414180.html的内容,在此表示感谢!

抱歉!评论已关闭.