设计模式--装饰模式

2019-11-30  本文已影响0人  daoshud1

什么是装饰模式

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

简单解释

优点: 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
缺点: 多层装饰比较复杂。并且会给系统添加更多的小类,变的更加复杂;

UML图

image

代码实现

参照大话设计模式中的示例,以穿衣服为例子

public class Person {
    private String name;
    public Person(){

    }
    public Person(String name){
        this.name=name;
    }
    public void show(){
        System.out.println(String.format("给 %s 的装扮",this.name));
    }
}
/**
 * 装饰类 继承person,并覆写show方法
 * @author ws
 * @version 1.0
 */
public class Clothes extends Person {
    private  Person person;
    public Clothes(){
    }
    //设置装饰方法,并将person做为参数传入
    public void Decorator(Person person){
        this.person=person;
    }
    @Override
    public void show() {
        if(this.person!=null){
            person.show();
        }
    }
}

/**
 * 创建T恤,实现穿T恤方法
 * @author ws
 * @version 1.0
 */
public class Txu extends Clothes {
    @Override
    public void show() {
        System.out.println("T恤");
        super.show();
    }
}
/**
 * 创建裤子类,实现穿裤子的方法
 * @author ws
 * @version 1.0
 */
public class Kuz extends Clothes {
    @Override
    public void show() {
        System.out.println("裤子");
        super.show();
    }
}
public static void main(String[] args) {
        Person person=new Person("等等");
        Txu t=new Txu();
        Kuz k=new Kuz();
        t.Decorator(person);
        k.Decorator(t);
        k.show();
    }
    
//输出
裤子
T恤
给 等等 的装扮

参照:菜鸟教程、大话设计模式

上一篇 下一篇

猜你喜欢

热点阅读