JAVA设计模式学习与实践

本人JAVA渣渣,从Python半路出家转到JAVA的坑,一直想系统学习整理下JAVA设计模式。设计模式大多是经验之谈,关键是理解思想。

工厂模式

工厂模式(Factory Pattern)是Java 中最常用的设计模式之一。 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

  • 原始模式
    Interface:Milk
    Class: Telunsu 继承Milk接口
    使用: new Telunsu().getName();

  • 简单工厂模式(com.ld.pattern.factory.simplefactory):对于用户而言,隐藏创建对象的过程

    //SimpleFactory.java
    if("Telunsu".equals(name)) return new Telunsu();
    ...
    //SimpleFactoryTest.java
    SimpleFactory f = new SimpleFactory();
    f.getMilk("Telunsu");
    
  • 工厂方法模式(com.ld.pattern.factory.factoryfunc):把工厂也抽象成接口, 具体的工厂类实现特定的功能
    Interface:Factory
    class: TelunsuFactory

    public class TelunsuFactory implements Factory {
      public Milk getMilk() {
       return new Telunsu();
         }
     }
    
  • 抽象工厂模式(com.ld.pattern.factory.abstractfunc):用户的主入口是一个抽象类用来提供入口。用户通过访问这个抽象工厂就可以一目了然该工厂能提供什么样的产品服务。使用抽象类既可以写接口的功能还可以存储业务逻辑。相比较于工厂方法模式的好处是易于扩展:比如增加sanlu牛:简单工厂则需改动原始判断代码违背开闭原则,工厂方法模式增加新的工厂,而在抽象工厂模式中,用户只需要新增接口。

    public abstract class AbstractFactory {
      public abstract Milk getMengniu();
      public abstract Milk getYili();
      public abstract Milk getTelunsu();
      }
    

    具体的工厂实现类:

    public class MengniuFactory implements Factory {
    public Milk getMilk() {
        return new Mengniu();
        }
    }
    

    测试:

    public static void main(String[] args) {
         MilkFactory MF = new MilkFactory();
         System.out.println(MF.getMengniu());
     }
    

单例模式

单例也是常用的软件设计模式,属于创建型模式的一种。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象有利于协调系统整体的行为。

  • 饿汉式:在实例使用之前,不管是否使用都先new出来再说。避免了线程安全问题。
 类的构造函数定义为private的,保证其他类不能实例化此类.
 然后提供了一个静态实例并返回给调用者.
 测试:
 
 

在这里插入图片描述

  • 懒汉式:默认加载的时候不实例化,需要用到再实例化。(在Spring里延时加载就是使用的这个)

在这里插入图片描述
解决1:增加同步锁(synchronized),但是这样做性能极差非常耗时。
解决2: 使用比较tricky的线程内部类。

  • 注册登记式:
    每使用一次,都往一个固定容器注册并将使用过的缓存。IOC中的单例都是典型的注册登记单例。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值