【上海校区】需要了解的几种设计模式

Java 未结 1 179
医院网络营销
医院网络营销 2021-04-30 09:19
悬赏:27
相关标签:
1条回答
  • 2021-04-30 09:53
    本帖最后由 biu波儿了罢 于 2019-7-21 20:18 编辑

    需要了解的几种设计模式
          1.简单工厂模式
          这个用的比较少,就是有个工厂,告诉你我要什么东西,你造好了给我就行。比如说
    [Java] 纯文本查看 复制代码
    public interface Ball {      public String create();  }

    [Java] 纯文本查看 复制代码
    public class Soccer implements Ball {      @Override      public String create() {          return "give you a soccer";      }  }  

    [Java] 纯文本查看 复制代码
    public class BasketBall implements Ball {      @Override      public String create() {          return "give you a basketBall";      }  }  

    [Java] 纯文本查看 复制代码
    public class EasyBallFactory  {      public static Ball createBall(String name){          if (name.equals("basketball")){              return new BasketBall();          }else if(name.equals("soccer")){              return new Soccer();          }else {              return null;          }      }      public static void main(String[] args) {          Ball soccer = EasyBallFactory.createBall("soccer");          Ball basketBall = EasyBallFactory.createBall("basketball");          System.out.println(soccer.create()); //give you a soccer          System.out.println(basketBall.create()); //give you a basketBall      }  }  

         2.工厂模式
          这个其实和简单工厂模式差不太多,就是将工厂继续拆分,比如说刚刚EasyBallFactory是一个总工厂,我们现在拆分成SoccerFactory和BasketBallFactory分别生产足球和篮球。某个工厂内部可以根据需求生产不同的产品,比如说soccer可以生产不同大小的出来
    [Java] 纯文本查看 复制代码
    public interface BallFactory {      public Ball create();  }

    [Java] 纯文本查看 复制代码
    public class SoccerFactory implements BallFactory {      @Override      public Ball create() {          //do something          return null;      }  }  public class BasketBallFactory implements BallFactory {      @Override      public Ball create() {          //do something          return null;      }  }  


          3.抽象工厂模式
          抽象工厂模式主要设计产品组的概念,就是某一个工厂生产出配套的一系列产品。例如,在生产足球的同时,SoccerFactory还可以生产与之配套的足球杂志。
    [Java] 纯文本查看 复制代码
    public interface Journal {      public String create();  }  public class SoccerJournal implements Journal{      @Override      public String create() {          return "give you a Soccer Journal...";      }  }  public class SoccerFactory implements BallFactory {      @Override      public Ball create() {          return new Soccer();      }      public Journal createJournal(){          return new SoccerJournal();      }  }  



           4.单例模式
           单例模式有很多种形式,最佳实践应该是两重判断,保证只new出来一个。单例可以说是非常普遍的设计模式了。单例就是指在服务容器的生命周期中只能有这么一个。比如说Servlet、Spring中注入的Bean等等都是单例的。
    [Java] 纯文本查看 复制代码
    public class ShiroUtils {      public  static Session session;      public static Session getSession() {          if (session == null){              synchronized(ShiroUtils.class){                  if (session == null){                      session = SecurityUtils.getSubject().getSession();                  }              }          }          return session;      }  }  



          5.代理模式
           Spring的AOP用的是动态代理,何为动态不看了,用过Spring的小伙伴都知道吧。单纯看一下最基础代理模式是什么样的。代理就是,一个对象辅助另一个对象去做某件事,同时还可以增加一点辅助功能。例如,你买车,的确是你花钱把车买到了,但是你不可能直接去和厂家谈吧,你应该通过4S店购买,同时4S店帮助你入保险扣税等操作,最终你才得到了你想要的车。
    [Java] 纯文本查看 复制代码
    public interface Buy {      public void buyCar();  }  



    [Java] 纯文本查看 复制代码
    public class People implements Buy {      @Override      public void buyCar() {          System.out.println("you get a car");      }  }  



    [Java] 纯文本查看 复制代码
    public class ProxyPeople implements Buy{      private People people;      public ProxyPeople(People people){          this.people=people;      }      @Override      public void buyCar() {          System.out.println("4s店帮你纳税、上保险...");          people.buyCar();      }      public static void main(String[] args) {          Buy buy = new ProxyPeople(new People());          buy.buyCar();      }  }  //输出:  4s店帮你纳税、上保险...  you get a car  



          6.适配器模式
           适配器,顾名思义,是让两个不兼容的东西可以一起工作。例如插座的电源是220V,手机直接给他220V 50HZ的交流电我相信一般都会直接炸了(除了诺基亚...)手机充电器就进行了适配,将电压变小,交流电变成直流电。除了这种需要改变属性的操作(比较好说,不举例子了),适配器还用于在接口继承方面。假设一个顶级接口有一大堆方法需要实现类实现,我新写了个类只是想选择的实现一两个接口,那其他的方法我是不是都需要实现一下,即使是空实现(单纯实现,不进行任何逻辑操作),这是我们就需要一个适配器类,空实现那些方法,我的新类只需要继承这个适配器类就好了,要是想实现某个方法,只需要重写掉配置类中对应的方法就好。这种模式基本都会用到,毕竟谁的代码还没个顶级接口啊。

    [Java] 纯文本查看 复制代码
    public interface ATopIntf {      public void one();      public void two();      public void three();  }  



    [Java] 纯文本查看 复制代码
    public class Adapter implements ATopIntf {      @Override      public void one() { }      @Override      public void two() { }      @Override      public void three() { }  }  



    [Java] 纯文本查看 复制代码
    public class You extends Adapter {      @Override      public void one() {          super.one();          System.out.println("one");      }  }  



          7.装饰模式
           一个装饰类,在原来类的基础上增加一点功能。是不是和代理模式很像,我甚至可以将整个代码搬过来照样可以说的通的。这两个模式意思上有点差别,代理模式是原对象做不了那件事,必须让代理对象去做,主导侧重于代理对象,比如说买车。装饰模式是说,就是让原对象直接去做这件事,只是功能上增强一点,主导在于原对象。比如说炒菜的时候撒点盐。







    文章摘自:https://juejin.im/post/5d27495fe51d4556dc2936c3














    73 讨论(0)
提交回复