入门设计模式之装饰

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80871450 ...
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80871450


学习更多设计模式请参考:入门设计模式之汇总篇


装饰模式:以对客户端透明的方式扩展对象的功能


装饰模式类图如下:


我们分析一下类图:

  • Girl:女孩接口,定义了一个getName()方法
  • XiaoWang:女孩的实现类,她实现了getName方法,
  • Decorator:装饰类,当我们想要扩展小王的方法时,又不能改变她的代码,也不推荐使用继承,那么这个时候装饰类就上场了。此装饰类对小王进行了包装,由他来提供小王的方法
  • Decorator1,Decorator2:当我们想要对小王装饰的时候就可以使用此装饰类

让我们来看一下代码实现吧

public interface Girl {
    public void getName();
}

public class XiaoWang implements Girl {
    @Override
    public void getName() {
        System.out.println("小王");
    }
}

public class Decorator implements Girl {
    private Girl girl;
   public Decorator(){}
    public Decorator(Girl girl){
        this.girl=girl;
    }
    @Override
    public void getName() {
        this.girl.getName();
    }
}

public class Decorator1 extends Decorator  {
    Decorator1(){

    }
    Decorator1(Girl girl){
        super(girl);
    }
    @Override
    public void getName() {
        System.out.println("小王1");
         super.getName();
    }
}

public class Decorator2 extends Decorator  {
    Decorator2(){

    }
    Decorator2(Girl girl){
        super(girl);
    }
    @Override
    public void getName() {
        System.out.println("小王2");
         super.getName();
    }
}

当我们需要对小王装饰的时候只需要下面如此调用就行了

public static void main(String[] args){
  Girl girl=  new Decorator1(new Decorator2(new XiaoWang()));
  girl.getName();
}






本文出自https://zhixiang.org.cn/#/blog/read/cc798e1d-2026-4f78-b7b8-986277ab477e,转载请保留。

学习更多设计模式请参考:入门设计模式之汇总篇


装饰模式:以对客户端透明的方式扩展对象的功能


装饰模式类图如下:


我们分析一下类图:

  • Girl:女孩接口,定义了一个getName()方法
  • XiaoWang:女孩的实现类,她实现了getName方法,
  • Decorator:装饰类,当我们想要扩展小王的方法时,又不能改变她的代码,也不推荐使用继承,那么这个时候装饰类就上场了。此装饰类对小王进行了包装,由他来提供小王的方法
  • Decorator1,Decorator2:当我们想要对小王装饰的时候就可以使用此装饰类

让我们来看一下代码实现吧

public interface Girl {
    public void getName();
}

public class XiaoWang implements Girl {
    @Override
    public void getName() {
        System.out.println("小王");
    }
}

public class Decorator implements Girl {
    private Girl girl;
   public Decorator(){}
    public Decorator(Girl girl){
        this.girl=girl;
    }
    @Override
    public void getName() {
        this.girl.getName();
    }
}

public class Decorator1 extends Decorator  {
    Decorator1(){

    }
    Decorator1(Girl girl){
        super(girl);
    }
    @Override
    public void getName() {
        System.out.println("小王1");
         super.getName();
    }
}

public class Decorator2 extends Decorator  {
    Decorator2(){

    }
    Decorator2(Girl girl){
        super(girl);
    }
    @Override
    public void getName() {
        System.out.println("小王2");
         super.getName();
    }
}

当我们需要对小王装饰的时候只需要下面如此调用就行了

public static void main(String[] args){
  Girl girl=  new Decorator1(new Decorator2(new XiaoWang()));
  girl.getName();
}






本文出自https://zhixiang.org.cn/#/blog/read/cc798e1d-2026-4f78-b7b8-986277ab477e,转载请保留。

相关文章
|
2月前
|
设计模式 Java
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
62 2
|
2月前
|
设计模式 XML Java
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
34 0
|
2月前
|
设计模式 传感器
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
44 0
|
7月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
115 0
|
2月前
|
设计模式 算法 Java
【设计模式】策略模式(定义 | 特点 | Demo入门讲解)
【设计模式】策略模式(定义 | 特点 | Demo入门讲解)
30 0
|
3月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
5月前
|
设计模式 Java 数据安全/隐私保护
Java中的设计模式:从入门到精通
Java中的设计模式:从入门到精通
|
7月前
|
设计模式 安全 Java
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
87 0
|
7月前
|
设计模式
装饰者设计模式(二)番外篇 装饰者设计模式和静态代理设计模式区别
装饰者设计模式(二)番外篇 装饰者设计模式和静态代理设计模式区别
|
7月前
|
设计模式
装饰者设计模式(一)
装饰者设计模式(一)