A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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














0 个回复

您需要登录后才可以回帖 登录 | 加入黑马