zoukankan      html  css  js  c++  java
  • 静态代理[装饰设计模式]的具体实现

    静态代理的运用场景:在原来的类的基础上进行扩展,与继承类相比,扩展性更强

    应用的技术:反射+多态

    核心思想:

    <1>原来的类不允许修改

    <2>有扩展需求

    <3>继承可以解决问题,但有局限性,只能实现一个类,想实现其他功能不同的类就不行了

    解决方法:
    代理:去创建一个类控制对另一个类的访问

    ps:代理类和实现类都实现了同一个接口,并且代理类有连接实现类的构造方法(实现类的对象是代理类的参数,乃至接口的实例是代理类的参数)

    ①创建一个共有接口,代码如下:

    1 //创建共用接口
    2 interface Actor {
    3     //抽象方法 可以省略掉 public abstract
    4     public abstract void Sing(int money);
    5 
    6     void show(int money);
    7 
    8     void eat();
    9 }

    ②创建一个具体的实现类(真正干活的类),代码如下:

     1 public class Bao implements Actor {
     2     @Override
     3     public void Sing(int money) {
     4         System.out.println("宝宝唱了一首歌!");
     5     }
     6 
     7     @Override
     8     public void show(int money) {
     9         System.out.println("宝宝跳了一段舞!");
    10     }
    11 
    12     @Override
    13     public void eat() {
    14         System.out.println("宝宝吃饭!");
    15     }
    16 }

    ③创建一个调控者,对实现类进行管控,此案例中是对money进行管控,钱到位就干活,钱不够,嗯···就是钱不够,代码如下:

     1 class proxy  implements Actor{
     2     Actor actor;
     3     public proxy (Actor actor){
     4         this.actor=actor;
     5     }
     6     @Override
     7     public void Sing(int money) {
     8         if (money>20){
     9             actor.Sing( money);
    10         }
    11         else{
    12             System.out.println("钱不够");
    13         }
    14     }
    15 
    16     @Override
    17     public void show(int money) {
    18           if (money>20){
    19               actor.show(money);
    20           }
    21           else{
    22               System.out.println("钱不够");
    23           }
    24     }
    25 
    26     @Override
    27     public void eat() {
    28 
    29     }
    30 
    31 
    32 }

    ④测试类:

    1 public class Test {
    2     public static void main(String[] args) {
    3         proxy p =new proxy(new Bao());
    4         p.Sing(21);
    5         p.show(20);
    6     }
    7 }

    ⑤具体实现效果:

  • 相关阅读:
    oracle在没
    一天中时针和分钟重合的次数
    oracle的隐藏的东东
    左右小移动
    JS全选的操作
    JS定时器
    在文件中查找字符串
    表单原件
    div和span互换
    div和span的区别
  • 原文地址:https://www.cnblogs.com/linsky/p/10363759.html
Copyright © 2011-2022 走看看