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, 1 展示点 装饰类
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, 2 展示点 装饰类
package com.pattern.structure.decrator; public class Two extends Decrator { public void show() { super.show(); addShow(); } private void addShow() { System.out.println("2 展示点展示……"); } }
6, 3 展示点 装饰类
package com.pattern.structure.decrator; public class Three extends Decrator { public void show() { super.show(); addShow(); } private void addShow() { System.out.println("3 展示点展示……"); } }
7, 4 展示点 装饰类
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(); } }
从上面代码可以看出,使用装饰器模式,动态改变展示效果。
装饰模式通用类图
------
文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。
松下问童子,言师采药去。
只言此山中,云深不知处。