Decrator 装饰模式

 

    

  注:装饰模式是结构型设计模式,动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

 

    主要是利用组合代替继承来实现业务功能,对动态改变业务实现来说,相比更灵活。

 

    假如我们有一个工程,他有四个展示点,1、2、3、4,外国游客来考察,展示1、2、3比较好,领导来考察,展示2、3、4,下面来观看,展示1、2、4,比较好,这里我们就需要用到装饰模式,利用组合代替继承,动态改变展示效果。

 

Java代码简单实现

1,工程展示接口

 

package com.pattern.structure.decrator;

 

public interface Project {

 

public void show() ;

}

 

 

 

2, 工程基本展示信息

 

package com.pattern.structure.decrator;

 

public class ConcreteProject implements Project {

 

@Override

public void show() {

 

System.out.println("项目基本情况……");

}

 

}

 

 

 

3,展示装饰抽象类

 

package com.pattern.structure.decrator;

 

public abstract class Decrator implements Project

{

 

private Project project ;

 

public void setProject(Project project ) {

 

this.project = project ;

}

 

@Override

public void show() {

 

if(project != null)

project.show(); 

}

 

}

 

 

 

4, 展示点 装饰类

 

package com.pattern.structure.decrator;

 

public class One extends Decrator {

 

@Override

public void show() {

 

super.show();

addShow(); 

}

 

private void addShow() {

System.out.println("1 展示点展示……");

}

 

}

 

 

 

5, 展示点 装饰类

 

package com.pattern.structure.decrator;

 

public class Two extends Decrator {

 

 

public void show() {

 

super.show(); 

addShow(); 

}

 

private void addShow() {

 

System.out.println("2  展示点展示……");

}

}

 

 

 

6, 展示点 装饰类

 

package com.pattern.structure.decrator;

 

public class Three extends Decrator {

 

 

public void show() {

 

super.show(); 

addShow(); 

}

 

private void addShow() {

 

System.out.println("3 展示点展示……");

}

}

 

 

 

7, 展示点 装饰类

 

package com.pattern.structure.decrator;

 

public class Four extends Decrator {

 

 

public void show() {

 

super.show(); 

addShow(); 

}

 

private void addShow() {

 

System.out.println("4 展示点展示……");

}

}

 

 

 

8, 客户端代码

 

package com.pattern.structure.decrator;

 

public class Client {

 

public static void main(String[] args) {

 

// 外国考察团,1,2,3

//ConcreteProject project = new ConcreteProject() ;

//One one = new One() ;

//Two two = new Two() ;

//Three three = new Three() ;

//

//one.setProject(project);

//two.setProject(one);

//three.setProject(two);

//

//three.show(); 

 

 

// 领导考察团,2,3,4

//ConcreteProject project = new ConcreteProject() ;

//Two two = new Two() ;

//Three three = new Three() ;

//Four four = new Four() ;

//

//two.setProject(project); 

//three.setProject(two);

//four.setProject(three);

//

//four.show();

 

 

// 下面干事人员,1,2,4

ConcreteProject project = new ConcreteProject() ;

One one = new One() ;

Two two = new Two() ;

Four four = new Four() ;

 

one.setProject(project);

two.setProject(one);

four.setProject(two);

 

four.show();

 

}

}

 

 

 

 

从上面代码可以看出,使用装饰器模式,动态改变展示效果。

 

 

 

装饰模式通用类图

 

 

------

  文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

 

 

 

 

 

 

 

posted @ 2013-10-05 07:46  li.zhiliang  阅读(482)  评论(0编辑  收藏  举报