欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式初学———"鸭子"模式

程序员文章站 2022-04-12 20:28:37
...

     最近刚刚开了设计模式,我们学习的是Head First设计模式这本书,写的很形象很生动,一开始的“鸭子”设计模式就很让我感兴趣,自己不知不觉已经学程序学了快两年了,尴尬的是啥也没学会,不行,以后要强迫自己学点东西了,就从现在开始吧!

      一开始感觉这个设计模式挺麻烦的,怎么要创建这么多类,继承不就完事了吗?不过学了之后才明白了自己的无知,,,虽然书上的鸭子模式挺好学的,但为了自己能形象地记住,我自己想了一个超级符合我的问题来记住这个模式。

        lol有很多技能,比如q w e r等等,,下边就为这些技能创建个类AllSkills如下:

package com.jineng;

public abstract class AllSkills {
   
    public  void Qskill() {
        System.out.println("Q技能");
    }
    public  void Wskill() {
        System.out.println("W技能");
    }
    public void Eskill() {
        System.out.println("E技能");
    }
    public void Rskill() {
        System.out.println("R技能");
        
    }
}

       然后问题来了,身为一个辅助(原谅我这个小菜)老子一般多一个技能——秘术,插眼!!这到底该怎么办?再往这个类里加一个主动技能?可这样一旦子类调用它们都能实现啊!这样辅助岂不是毫无作用?不行,再添加一个类来实现这个主动技能,可java不支持多继承啊,怎么办,难道我辅助游戏里不如人,代码里也不如人?我不服!!!——java仿佛听到了辅助的呐喊,于是派来了接口来拯救辅助,“接口”一出,众生皆臣服。下边就是方法:

       创建一个ActiveSkill 接口,并且赋予它方法如下:

public interface ActiveSkill {

    public void Activeskill() ;

}

     然后在原先类里边加入如下

ActiveSkill active; 以及方法

 public void activekill()
    {
        active.Activeskill();

    }

就ok了,

        接下来的任务就是如何拥有主动技能了,也很简单,创建一个ActiveSkills类implements这个接口来实现自己的主动技能如下

public class ActiveSkills  implements ActiveSkill {
    @Override
    public void Activeskill() {
        System.out.println("主动技能  : 插眼");        
    }

}

      ok,准备工作完成,然后就是让自己的英雄可以q w  e r外加插眼了!创建一个Hero类继承原先类并且让原先类里边的active有ActiveSkills里边的方法,如下:

public class Hero extends AllSkills{

    public Hero()
    {
        active =new ActiveSkills();
    }

}

     最后便是添加一个Main类来实现他们了 如下:

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         AllSkills  hero=new Hero();
         hero.Qskill();
         hero.Wskill();
         hero.Eskill();
         hero.Rskill();
         hero.activekill();
    }

}

     我们的辅助终于拥有主动技能了!但是,我是一个有梦想的辅助,眼石什么的不存在的,只有我才能carry比赛!我要出贪欲九头蛇来为自己续航,输出!

      没问题,java来满足你,简单实现如下:

     创建一个NewSkill类implements 这个接口为新主动技能添加方法如下:

public class NewSkill  implements ActiveSkill{
    @Override
    public void Activeskill() {
      System.out.println("主动技能:贪欲九头蛇技能");   
    }

}

      也不需要再重写一个类来继承父类什么的,只需要在原先父类里边再添加一个方法如下:

 

public void SetSkill(ActiveSkill active)
    {
        this.active=active;

    }

  然后直接在Main类里边修改就可以了,如下:

public class Main {

    public static void main(String[] args) {
         AllSkills  hero=new Hero();
         hero.Qskill();
         hero.Wskill();
         hero.Eskill();
         hero.Rskill();
         hero.activekill();
         hero.SetSkill(new NewSkill());
         hero.activekill();
    }

}

    这样你的辅助就拥有贪欲九头蛇技能了,是不是很简单呢?哈哈,身为一个辅助,你6神装的时候永远不知道你的ad四个格子还没出满你是多么的无奈,还是自己掌控比赛吧。。。。废话少说,记住少继承多组合的原则,记不住祝你当一个永远只会出眼石的辅助!

      写这个的原因是为了让自己可以记住,写的不好还望大家见谅哈!


   





 



      

相关标签: 设计模式 初学