https://github.com/YEN-GitHub/PatternDemo/tree/master/src/StructuralPattern/DecoratorPattern
Provide a surrogate or placeholder for another object to control access to it.
为其他对象提供一种代理以控制对这个对象的访问。
请用装饰模式(Decorator)为某游戏角色设计换装功能,具体描述如下:
现阶段游戏包含人类(Human)和兽人(Orc)两种角色(Charactor),在将来可能会增加新角色。
现阶段服装(Finery)包含T恤(TShirt),牛仔裤(Jean),运动鞋(Sneaker),西装(Suit),领带(Tie),皮鞋(LeatherShoe)六种,在将来可能会增加新的服装,并且角色服装可以依据用户喜爱自由穿戴。
并搭配出:
绅士风的人类(西装,领带,皮鞋);
休闲风的兽人(T恤,牛仔裤,运动鞋);
混搭风的兽人(西装,领带,牛仔裤,运动鞋)。
题目中角色和服装只需要通过输出语句表示即可,比如:混搭风的兽人(西装,领带,牛仔裤,运动鞋),将输出“运动鞋 牛仔裤 领带 西装 装扮的兽人XXX(名字)”。
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 12:59
* Abstract:角色
*/
public class Charactor {
public void show(){
}
}
package StructuralPattern.DecoratorPattern.demo1;
import StructuralPattern.DecoratorPattern.demo1.Charactor;
/**
* Created by yangenneng on 2017-05-03 12:59
* Abstract:人类
*/
public class Human extends Charactor {
private String name;
public Human(String name){
this.name=name;
}
public void show(){
System.out.println("--人类:"+name);
}
}
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 12:59
* Abstract:兽人
*/
public class Orc extends Charactor {
private String name;
public Orc(String name){
this.name=name;
}
public void show(){
System.out.println("--兽人:"+name);
}
}
package StructuralPattern.DecoratorPattern.demo1;
import StructuralPattern.DecoratorPattern.demo1.Charactor;
/**
* Created by yangenneng on 2017-05-03 13:00
* Abstract:服装
*/
public class Finery extends Charactor {
protected Charactor charactor;
public Finery(Charactor charactor){
this.charactor=charactor;
}
public void show(){
this.charactor.show();
}
}
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 13:02
* Abstract:T恤
*/
public class TShirt extends Finery {
public TShirt(Charactor charactor) {
super(charactor);
}
public Charactor decorator(Charactor charactor){
this.charactor=charactor;
return charactor;
}
public void show(){
System.out.print("T恤 ");
super.show();
}
}
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 13:03
* Abstract:领带
*/
public class Tie extends Finery {
public Tie(Charactor charactor) {
super(charactor);
}
public Charactor decorator(Charactor charactor){
this.charactor=charactor;
return this.charactor;
}
public void show(){
System.out.print("领带 ");
super.show();
}
}
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 13:03
* Abstract:西装
*/
public class Suit extends Finery {
public Suit(Charactor charactor) {
super(charactor);
}
public Charactor decorator(Charactor charactor){
this.charactor=charactor;
return charactor;
}
public void show(){
System.out.print("西装 ");
super.show();
}
}
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 13:03
* Abstract:运动鞋
*/
public class Sneaker extends Finery {
public Sneaker(Charactor charactor) {
super(charactor);
}
public Charactor decorator(Charactor charactor){
this.charactor=charactor;
return charactor;
}
public void show(){
System.out.print("运动鞋 ");
super.show();
}
}
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 13:03
* Abstract:皮鞋
*/
public class LeatherShoe extends Finery {
public LeatherShoe(Charactor charactor) {
super(charactor);
}
public Charactor decorator(Charactor charactor){
this.charactor=charactor;
return charactor;
}
public void show(){
System.out.print("皮鞋 ");
super.show();
}
}
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 13:02
* Abstract:牛仔裤
*/
public class Jean extends Finery {
public Jean(Charactor charactor) {
super(charactor);
}
public Charactor decorator(Charactor charactor){
this.charactor=charactor;
return charactor;
}
public void show(){
System.out.print("牛仔裤 ");
super.show();
}
}
package StructuralPattern.DecoratorPattern.demo1;
/**
* Created by yangenneng on 2017-05-03 13:02
* Abstract:客户端测试
*/
public class Client {
public static void main(String[] args) {
//人类
Human human=new Human("绅士风");
Orc orc1=new Orc("休闲风");
Orc orc2=new Orc("混搭风");
//装饰服饰
//绅士风的人类(西装,领带,皮鞋)
Suit suit=new Suit(human);//西装
Tie tie=new Tie(suit);//领带
LeatherShoe leatherShoe=new LeatherShoe(tie);//皮鞋
leatherShoe.show();
//休闲风的兽人(T恤,牛仔裤,运动鞋)
TShirt tShirt1=new TShirt(orc1);
Jean jean1=new Jean(tShirt1);
Sneaker sneaker1=new Sneaker(jean1);
sneaker1.show();
//混搭风的兽人(西装,领带,牛仔裤,运动鞋)
Suit suit2=new Suit(orc2);
Tie tie2=new Tie(suit2);
Sneaker sneaker2=new Sneaker(tie2);
sneaker2.show();
}
}