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

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
版权声明:本文为博主原创文章,转载请附上博文链接!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容