工厂模式和单例模式

  • 我们为什么要学习设计模式?

    1. 复用解决方案: 通过复用已经公认的设计,能够在解决问题时取得先发优势.避免重蹈覆辙.您是是否也有类似疑虑:几个项目下好像解决方案大体可以公用.但是就是没有总结.工作好像一直在重复

    2. 确定通用术语:
      开发中的交流和协作都需要共同的词汇其础和对问题的共识.如果交流双方都学习过设计模式交流起来就会十分的舒服.不知道你有没有想表达又表达不清楚的设计
      思路,或者自己表达得明白但对方又误解了你的意思了呢?看了设计模式你也许可以找到你想要的答案

    3. 改善团队的沟通和个人学习.一个团队一起学习设计模式,有助于团队战斗力的提高.

    4. 代码更易于修改与维护. 因为设计模式都是久经考验的解决方案,它们的结构都是经过长期的发展形成的.善于应对变化.5.学习模式后,就算不用模式中的方法.也会更好的采取更好的策略去解决问题.

工厂模式

  • 什么是工厂模式?

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

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

  • 使用场景

    1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

    2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

    3、设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。

  • 实现

    我们将编写一个工厂模式来完成对不同图形的创建。

    • 第一步

      创建一个接口(也就是你要把一个什么样类型的东西放进工厂里)

      Shape.java

      public interface Shape {
          void draw(); 
      }
      
    • 第二步

      创建n个类来实现这个接口(比如你接口是个形状的范说,那么这些类就是具体例子,如圆形、正方形、长方形)

      Circle.java

      public class Circle implements Shape{
          public void draw() {
              System.out.println("画一个圆");
          }
      }
      

      Women.java(我喜欢女人,所以这里画一个女人)

      public class Women implements Shape{
          public void draw() {
              System.out.println("画一个女人");
          }
      }
      
    • 第三步

      东西都准备好了,那么该进厂啦!

      ShapeFactory.java

      public class ShapeFactory {
          public Shape getShape(String shapeType){
              if (shapeType == null){
                  return null;
              }
              if (shapeType.equals("circle")){
                  return new Circle();
              }else if (shapeType.equals("women")){
                  return new Women();
              }
              return null;
          }
      }
      

      这里就是把所有的类的创建交给定义出来的这个工厂,不要去纠结自己要new什么类型的类啦,以后只要来工厂拿就好咯!

    • 第四步

      测试使用工厂模式

      Test.java

      public class Test {
          public static void main(String[] args) {
              ShapeFactory shapeFactory = new ShapeFactory();
              Shape circle = shapeFactory.getShape("circle");
              circle.draw();
              Shape women = shapeFactory.getShape("women");
              women.draw();
          }
      }
      

      由测试类可以看出来,如今若想新建一个对象,不需要去想对象的类型是什么,只要新建一个工厂对象,然后根据工厂内的要求去创建对应的对象啦!

单例模式

  • 什么是单例模式?

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

  • 使用场景

    1、要求生产唯一序列号。

    2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。

    3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

  • 实现

    饿汉式的实现

    • 步骤一

      SingleObject.java

      public class SingleObject {
          private static SingleObject instance = new SingleObject();
          //这样类就不会被实例化啦
          private SingleObject(){}
          //这样来获取唯一可用的对象
          public static SingleObject getInstance(){
              return instance;
          }
          public void showMessage(){
              System.out.println("我是单例模式");
          }
      }
      
    • 步骤二

      Test.java

      public class Test {
          public static void main(String[] args) {
              SingleObject singleObject = SingleObject.getInstance();
              singleObject.showMessage();
          }
      }
      

    懒汉式的实现

    • 步骤一

      public class SingleObject {
          private static SingleObject instance;
          //这样类就不会被实例化啦
          private SingleObject(){}
          //这样来获取唯一可用的对象
          public static SingleObject getInstance(){
              if(instance == null){
                  instance = new SingleObject();
              }
              return instance;
          }
          public void showMessage(){
              System.out.println("我是单例模式");
          }
      }
      
    • 步骤二

      同饿汉式一样啦!

      下面对单件模式的懒汉式与饿汉式进行简单介绍:
      1、饿汉式:在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。
      2、懒汉式:当程序第一次访问单件模式实例时才进行创建。
      如何选择:如果单件模式实例在系统中经常会被用到,饿汉式是一个不错的选择。
      反之如果单件模式在系统中会很少用到或者几乎不会用到,那么懒汉式是一个不错的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值