软件编程
位置:首页>> 软件编程>> java编程>> java设计模式学习之装饰模式

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

作者:南国木棉  发布时间:2021-10-02 04:22:54 

标签:java,设计模式,装饰模式

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

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

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

实例:给一个人配置穿衣

1:代码结构图

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

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

来源:http://www.cnblogs.com/hrlizhi/p/7641082.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com