大话设计模式-装饰模式(大鸟和小菜Java版)
Posted 香风智乃哈~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话设计模式-装饰模式(大鸟和小菜Java版)相关的知识,希望对你有一定的参考价值。
装饰模式:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。(百度百科)
这个模式让后期的修改变得极为简单,真的就高内聚低耦合,如果想换装扮或者添加装扮,只需要添加一个类,或者修改一下就能完成。很高程度上提高了效率。
Person类和装饰打扮的代码
package 设计模式.装饰模式;
//定义一个Person类
public class Person {
// 定义私有变量
private String name;
//无参构造方法
public Person() {
}
//有参构造方法
public Person(String name) {
this.name = name;
}
// 定义一个方法
public void show(){
System.out.println("受害者(装饰者):"+this.name);
}
}
// 定义一个衣服类
class Clothes extends Person{
private Person p;
//打扮方法
public void decorate(Person p){
this.p = p;
}
//重写show方法
@Override
public void show() {
// 等于null的话就是没有穿衣服?
if(p != null){
p.show();
}
}
}
//具体的装饰方法,下面五个类是一样的(可以根据自己的兴趣进行书写)
class CauClothes1 extends Clothes{
// 重写show方法
@Override
public void show() {
super.show();
System.out.println("已装饰跨裤");
}
}
class CauClothes2 extends Clothes{
@Override
public void show() {
super.show();
System.out.println("已装饰动漫T恤");
}
}
class CauClothes3 extends Clothes{
@Override
public void show() {
super.show();
System.out.println("已装饰皮鞋");
}
}
class CauClothes4 extends Clothes{
@Override
public void show() {
super.show();
System.out.println("已装饰女仆装");
}
}
class CauClothes5 extends Clothes{
@Override
public void show() {
super.show();
System.out.println("已装饰高跟鞋");
}
}
class CauClothes6 extends Clothes {
@Override
public void show() {
super.show();
System.out.println("已装饰女仆发饰");
}
}
客户端调用代码
package 设计模式.装饰模式;
public class Test {
public static void main(String[] args) {
// new一个穿衣服的对象
Person p1 = new Person("小菜");
// 这里使用的是多态
Clothes c1 = new CauClothes1();
Clothes c2 = new CauClothes2();
Clothes c3 = new CauClothes3();
//调用打扮的这个方法
c1.decorate(p1);
c2.decorate(c1);
c3.decorate(c2);
//穿衣效果展示出来
c3.show();
Person p2 = new Person("大鸟");
Clothes c4 = new CauClothes4();
Clothes c5 = new CauClothes5();
Clothes c6 = new CauClothes6();
c4.decorate(p2);
c5.decorate(c4);
c6.decorate(c5);
c6.show();
Person p3 = new Person("香风智乃");
c5.decorate(p3);
c4.decorate(c5);
c2.decorate(c4);
c6.decorate(c2);
c6.show();
}
}
以上就是本文的装饰模式啦~~
参考大佬的文章(更加的详细还有uml图),附上链接:https://blog.csdn.net/yixiang1989/article/details/38469931
以上是关于大话设计模式-装饰模式(大鸟和小菜Java版)的主要内容,如果未能解决你的问题,请参考以下文章