装饰模式1.3_大话设计模式学习笔记06

小菜写的第三份代码:

1、Person类(ConcreteComponent)

  • 照常不变,与第二份代码里一样。
public class Person {
	
	private String name;
	
	public Person() {
		super();
	}
	public Person(String name) {
		super();
		this.name = name;
	}

	public  void Show() {
		System.out.println("爱打扮的" + name);
	}
}

2、服饰类(Decorator)

  • 即继承于Person类,又在类里安排一个Person类型的属性。
    – 这个component对象就是代码的关键部分,继承+包含 这样才体现出嵌套的感觉出来。
  • 至于方法也都是针对这个Person属性的component对象进行:
    1、Decorate(Person component) 对this.component对象进行赋值。
    2、 public void Show() 展示this.componen对象的具体内容。
public class Finery extends Person {
	private Person component;
	
	public Finery() {
		super();
	}
	public Finery(String name) {
		super(name);
	}
	public Finery(Person component) {
		super();
		this.component = component;
	}

	
	public void Decorate(Person component) {
		this.component = component;
	}
	
    public void Show() {
    	if(component != null) {
    		component.Show();
    	}
    }
}

3、具体服饰类(ConcreteDecorator)

  • 继承于Finery抽象服饰类,这些具体服饰类大部分都一样,就对Show()方法的重写不一样罢了。
// 1、T恤类
public class TShirts extends Finery {
	 public TShirts() {
		super();
	}
	public TShirts(Person component) {
		super(component);
	}
	public TShirts(String name) {
		super(name);
	}

	public void Show() {
		 System.out.print("大T恤   ");
		 super.Show();
	 }
}

// 2、垮裤类
public class BigTrouser extends Finery {
	public BigTrouser() {
		super();
	}
	 public BigTrouser(Person component) {
		super(component);
	}
	public BigTrouser(String name) {
		super(name);
	}

	public void Show() {
		 System.out.print("垮裤   ");
		 super.Show();
	 }
}

// 3、皮鞋类
public class WearLeatherShoes extends Finery {
	public WearLeatherShoes() {
		super();
	}
	 public WearLeatherShoes(Person component) {
		super(component);
	}
	public WearLeatherShoes(String name) {
		super(name);
	}

	public void Show() {
		System.out.print("皮鞋   ");
		super.Show();
	 }
}

// 4、球鞋类
public class WearSneakers extends Finery {
	public WearSneakers() {
		super();
	}
	 public WearSneakers(Person component) {
		super(component);
	}
	public WearSneakers(String name) {
		super(name);
	}

	public void Show() {
		System.out.print("破球鞋   ");
		super.Show();
	 }
}

// 5、西装类
public class WearSuit extends Finery {
	public WearSuit() {
		super();
	}
	 public WearSuit(Person component) {
		super(component);
	}
	public WearSuit(String name) {
		super(name);
	}

	public void Show() {
		System.out.print("西装   ");
		super.Show();
	 }
}

// 6、领带类
public class WearTie extends Finery {
	public WearTie() {
		super();
	}
	 public WearTie(Person component) {
		super(component);
	}
	public WearTie(String name) {
		super(name);
	}

	public void Show() {
		System.out.print("领带   ");
		super.Show();
	 }
}

4、客户端代码

xc --> pqx.Decorate(xc); --> kk.Decorate(pqx); --> dtx.Decorate(kk);

  • 就是这么一层层赋值嵌套去实现组装。
public class zTest2 {

	public static void main(String[] args) {
        Person xc = new Person("小菜");
        
        System.out.println("小菜的第一套打扮:");
        
	
        WearSneakers pqx = new WearSneakers();
        BigTrouser kk = new BigTrouser();
        TShirts dtx = new TShirts();
      
        pqx.Decorate(xc);
        kk.Decorate(pqx);
        dtx.Decorate(kk);
        dtx.Show();
       
        System.out.println("小菜的第二套打扮:");
        
        WearLeatherShoes px = new WearLeatherShoes(xc);
        WearTie ld = new WearTie(px);
        WearSuit xz = new WearSuit(ld);
        
        xz.Show();
        
	}

}

5、输出结果

小菜的第一套打扮:
大T恤 垮裤 破球鞋 爱打扮的小菜
小菜的第二套打扮:
西装 领带 皮鞋 爱打扮的小菜

总结:
这份代码确实是一份成熟的装饰模式代码,在代码结构上,严格地遵守了开放-封闭原则,“什么该抽象什么该具体?”都正确的实现了。代码看上去非常的美观简洁,Person—Finery—TShirts(……)三连继承,并且在Finery中安置了父类Person属性的对象,从而实现了嵌套装饰。在现实生活中,就好像你穿外套是套在卫衣的外面的感觉,而不是你什么都不穿直接套外套。还有一点,这个要区别于建造者模式,感兴趣可以看下了解关键区别点

CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分类,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的clz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值