java设计模式学习之装饰模式
装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
创新互联网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、成都网站设计、成都网站建设易于使用并且具有良好的响应性。
优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
缺点:多层装饰比较复杂。
实例:给一个人配置穿衣
1:代码结构图
2:创建一个person类( ConcreteComponent)
package DecoratorModel; /** * 2017-10-9 10:39:09 * 装饰器设计模式 * Person 类 ConcreteComponent * @author 我不是张英俊 * */ public class Person { public Person(){} private String name; public Person(String name){ this.name=name; } public void Show(){ System.out.println("装扮的"+name); } }
3:服饰类
package DecoratorModel; /** *服饰类(Decorator) * @author 我不是张英俊 * */ public class Finery extends Person{ protected Person component; //打扮 public void Decorate(Person component){ this.component=component; } public void Show(){ if(component!=null){ component.Show(); } } }
4:具体服饰类
public class Tshirts extends Finery { public void Show(){ System.out.println("大T恤"); super.Show(); } } public class BigTrouser extends Finery { public void Show(){ System.out.println("垮裤"); super.Show(); } } public class Sneakers extends Finery { public void Show(){ System.out.println("破球鞋"); super.Show(); } } public class Suit extends Finery { public void Show(){ System.out.println("西装"); super.Show(); } } public class Tie extends Finery { public void Show(){ System.out.println("领带"); super.Show(); } } public class LeatherShoes extends Finery { public void Show(){ System.out.println("皮鞋"); super.Show(); } }
5:测试类
public class test { public static void main(String[] args) { Person xc=new Person("旺财"); Sneakers pqx=new Sneakers(); BigTrouser kk=new BigTrouser(); Tshirts dtx=new Tshirts(); pqx.Decorate(xc); kk.Decorate(pqx); dtx.Decorate(kk); dtx.Show(); } }
6:控制台
大T恤
垮裤
破球鞋
装扮的旺财
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。
分享名称:java设计模式学习之装饰模式
文章源于:http://hbruida.cn/article/gegecp.html