美文网首页金三银四
2019-04-01面试:设计模式及使用场景

2019-04-01面试:设计模式及使用场景

作者: 可乐_a884 | 来源:发表于2019-04-01 22:20 被阅读0次

    1.单例模式:

    特点:就是给其他对象返回的都是同一个由自己创建的实例;

    应用:比如在spring中创建的bean实例默认就是单例模式的。比如网站的计数器

    实现:饿汉式(线程安全,在类加载的时候已经实例化,调用时速度快)

    
    public void
    
    

    2.工厂模式:

    特点:

    应用
    3.策略模式:
    特点:将每一个方法封装起来,使他们可以相互替换。解决在在编码吗是使用大量if -else问题。
    应用:
    a.同一个抽象类有多个子类,而又需要ifelse切换子类,冲q币的时候会员是97折,超级会员是92折,那么这就是两种策略
    举个比较简单的例子,冲q币的时候会员是97折,超级会员是92折。那么这就是两种策略。下面用代码实现。

    1.创建一个计算价格的策略接口

    public interface CalPrice(){
        //计算价格的方法
        DOuble returnPrice(Double QNum);
    }
    

    2.创建两个具体的价格计算策略

    public class Vip implements CalPrice(){
        
        @Override
        Double returnPrice(Double QNum){
            return QNum * 0.97;
        }
    }
     
    public class SVip implements CalPrice(){
        
        @Override
        Double returnPrice(Double QNum){
            return QNum * 0.92;
        }
    }
    

    3.创建一个用户角色,带有冲q币的功能

    public class Player{
        private CalPrice calPrice;
        
        public SetVip(CalPrice calPrice){
            this.calPrice = calPrice;
        }
        
        public void returnPrice(Double QNum){
            calPrice.returnPrice(Double QNum);
        }
    }
    

    4.使用方法

    public static void main(String[] args){
       Player player = new Player();
       player.setVip(new SVip);
       player.returnPrice(12);
    }
    

    总结

    通过将冲值q币的方法独立出来,实现了用户和身份的松耦合,可以动态的改变角色的身份,同时将冲q币的方法委托给了CalPrice类去执行,角色类不在实现具体的冲q币的方法,这也是一种组合的概念,符合多用组合,少用继承的设计原则(角色的冲q币方式不是继承来的,而是和CalPrice 组合来的)。

    作者:骑毛驴追宝马
    来源:CSDN
    原文:https://blog.csdn.net/u013759988/article/details/82620904
    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

        本文标题:2019-04-01面试:设计模式及使用场景

        本文链接:https://www.haomeiwen.com/subject/lqcibqtx.html