java设计模式学习之装饰模式

时间:2021-05-19

装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点:多层装饰比较复杂。

实例:给一个人配置穿衣

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恤
垮裤
破球鞋
装扮的旺财

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章