装饰模式(Decorator)_考研还是工作?工作。。。_百度空间

装饰模式:Decorator)在不改动原有类文件并且不使用继承的前提下动态的给一个对象添加一些额外的职责。

   优点:A、把类的装饰功能从类中搬离出去,简化原有的类。B、有效的把类的核心职责个装饰分离开来,而且可以除去相关类中重复的装饰逻辑

装饰模式的特点:

(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的索引(reference)
(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

//~Person.java

public class Person {
private String name;

public Person() {
   // TODO Auto-generated constructor stub
}

public Person(String name) {
   // TODO Auto-generated constructor stub
   this.name = name;
}

public void show() {
   System.out.println("装扮的-" + name);
}
}

//---------------------------------------------------------------------------------------

//~Finery.java

public class Finery extends Person {

public Finery() {
   // TODO Auto-generated constructor stub
}

public Finery(String name) {
   super(name);
   // TODO Auto-generated constructor stub
}

protected Person component;

public void decorate(Person component) {
   this.component = component;
}

@Override
public void show() {
   // TODO Auto-generated method stub
   if (this.component != null) {
    this.component.show();
   }
}
}

//---------------------------------------------------------------------------------------

//~TShirts.java

public class TShirts extends Finery {

@Override
public void show() {
   // TODO Auto-generated method stub
   System.out.print("大T恤 ");
   super.show();
}
}

//---------------------------------------------------------------------------------------

//~Tie.java

public class Tie extends Finery {
@Override
public void show() {
   // TODO Auto-generated method stub
   System.out.print("打领带 ");
   super.show();
}
}

//---------------------------------------------------------------------------------------

//~Suit.java

public class Suit extends Finery {
@Override
public void show() {
   // TODO Auto-generated method stub
   System.out.print("穿西服 ");
   super.show();
}
}

//---------------------------------------------------------------------------------------

//~Sneakers.java

public class Sneakers extends Finery {
@Override
public void show() {
   // TODO Auto-generated method stub
   System.out.print("运动鞋 ");
   super.show();
}
}

//---------------------------------------------------------------------------------------

//~LeatherShoes.java

public class LeatherShoes extends Finery {
@Override
public void show() {
   // TODO Auto-generated method stub
   System.out.print("皮鞋 ");
   super.show();
}
}

//---------------------------------------------------------------------------------------

//~BigTrouser.java

public class BigTrouser extends Finery{
@Override
public void show() {
   // TODO Auto-generated method stub
   System.out.print("大牛仔裤 ");
   super.show();
}
}

//---------------------------------------------------------------------------------------

//~Client.java

public class Client {
public static void main(String[] args) {
   Person person = new Person("小菜");//这是赤身裸体的-小菜
  
   System.out.println("{dy}种装扮:");
   Sneakers sneakerA = new Sneakers();
   BigTrouser bigTrouserA = new BigTrouser();
   LeatherShoes leatherShoeA = new LeatherShoes();
  
   sneakerA.decorate(person);//裸体的小菜正在穿运动鞋
   bigTrouserA.decorate(sneakerA);//穿了运动鞋的小菜正在传大牛仔裤
   leatherShoeA.decorate(bigTrouserA);//穿运动鞋和牛仔裤的小菜真正穿皮鞋
   leatherShoeA.show();//小菜出来了
  
   System.out.println("第二种装扮:");
   Tie tieB = new Tie();
   LeatherShoes leatherShoeB = new LeatherShoes();
   Suit suitB = new Suit();
  
   tieB.decorate(person);//裸体的小菜正在打领带
   leatherShoeB.decorate(tieB);//打了领带的小菜正在穿皮鞋
   suitB.decorate(leatherShoeB);//打了领带穿了皮鞋的小菜真正穿西服
   suitB.show();//小菜出来了
}
}



郑重声明:资讯 【装饰模式(Decorator)_考研还是工作?工作。。。_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——