首页 > 其他分享 >设计模式(一)创建型

设计模式(一)创建型

时间:2023-05-24 19:35:04浏览次数:31  
标签:Singleton 创建 模式 工厂 instance 实例 设计模式 public

1、单例模式

饿汉模式(最简单):类加载的时候就创建对象,线程安全

public class Singleton {
    // 首先,将构造方法 私有化
    private Singleton() {};
    // 创建私有静态实例,意味着在类加载就会进行创建
    private static Singleton instance = new Singleton();

    public static Singleton getInstance() {
        return instance;
    }
}

 饱汉模式:(双重效验锁)

public class Singleton {

    private Singleton() {}
    // 和饿汉模式相比,这边不需要先实例化出来,注意这里的 volatile,它是必须的
    private static volatile Singleton instance = null;

    public static Singleton getInstance() {
        if (instance == null) {
            // 加锁
            synchronized (Singleton.class) {
                // 这一次判断也是必须的,不然会有并发问题
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

  双重检查,指的是两次检查 instance 是否为 null。

2、工厂模式

1、简单工厂模式

实例化对象不是用new,用工厂方法替代。一个工厂类 XxxFactory,里面有一个静态方法,根据我们不同的参数,返回不同的派生自同一个父类(或实现同一接口)的实例对象。

 1 public class FoodFactory {
 2 
 3     public static Food makeFood(String name) {
 4         if (name.equals("noodle")) {
 5             Food noodle = new LanZhouNoodle();
 6             noodle.addSpicy("more");
 7             return noodle;
 8         } else if (name.equals("chicken")) {
 9             Food chicken = new HuangMenChicken();
10             chicken.addCondiment("potato");
11             return chicken;
12         } else {
13             return null;
14         }
15     }
16 }
简单工厂

2、工厂模式

之所以需要引入工厂模式,是因为我们往往需要使用两个或两个以上的工厂。

3、抽象工厂模式

为了解决不同的工厂生产产品的兼容问题,提出抽象工厂。直接选择一家品牌工厂,品牌工厂会负责生产所有的东西,而且能保证肯定是兼容可用的。

3、原型模式

有一个原型实例,基于这个原型实例产生新的实例,也就是“克隆”了。 

Object 类中有一个 clone() 方法,它用于生成一个新的对象,当然,如果我们要调用这个方法,java 要求我们的类必须先实现 Cloneable 接口,此接口没有定义任何方法,但是不这么做的话,在 clone() 的时候,会抛出 CloneNotSupportedException 异常。

protected native Object clone() throws CloneNotSupportedException;

Java 的克隆是浅克隆,碰到对象引用的时候,克隆出来的对象和原对象中的引用将指向同一个对象。通常实现深克隆的方法是将对象进行序列化,然后再进行反序列化。

 

标签:Singleton,创建,模式,工厂,instance,实例,设计模式,public
From: https://www.cnblogs.com/coooookie/p/17429292.html

相关文章

  • pycharm中创建python包失效
    testDemo是我创建的python包,但图标一直显示为文件夹,导致后期使用无法导入。   解决: 在设置中找到项目结构 选择对应文件夹并标记为源即可......
  • 设计模式
     模板方法设计模式非常重要 什么场景使用过  聚合支付  有共同行为的场景 聚合支付:银联支付支付宝支付 微信支付通过回调通知支付成功修改订单状态为成功1、暴露一个接口,提供给第三方支付回调2、多家支付回调通知参数报文都不相同,但是有共同的通知行为。......
  • Linux-ln创建链接
    1.ln命令介绍ln命令可以看作是link的缩写,其功能是创建文件间的链接,链接类型包括硬链接(hardlink)和软链接(符号链接,symboliclink) 2.ln命令格式ln命令的基本格式如下:ln[选项]源文件目标文件选项:-s:建立软链接文件。如果不加"-s"选项,则建立硬链接文件;-f:强制。如果目......
  • 二十三天搞懂设计模式之抽象工厂模式
    文章目录抽象工厂模式1.介绍2.实现3.代码4.总结抽象工厂模式1.介绍意图:提供一个创建一系列相关或者依赖的接口,而无需指定他们具体的类何时使用:系统的产品有多于一个产品族,而系统只消费其中某一族的产品,例子如下当前有个换装游戏,进入不同的游戏场景需要选择不同的游戏套装,比......
  • 二十三天搞懂设计模式之工厂模式
    文章目录1.定义2.工厂模式2.1实现2.2第一种方式代码3.总结1.定义在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。单例也是一种工厂为什么有了new之后,还要有工厂灵活控制生产过程权限、修饰、日志2.工厂模式2.......
  • C#设计模式——上
    文章目录设计模式序言-四大发明之活字印刷——面向对象思想的胜利四大发明之活字印刷——面向对象思想的胜利第一章面试受挫——代码无错就是好?第二章代码规范、重构第三章复制VS复用第四章业务的封装第五章体会简单工厂模式的美妙设计模式序言-四大发明之活字印刷——面向......
  • lightdb创建oracle兼容分区表
    zjh@postgres=#createtablehash_part_tab(idnumber,deal_datedate,area_codenumber,nbrnumber,contentsvarchar2(4000))zjh@postgres-#partitionbyhash(deal_date)zjh@postgres-#PARTITIONS12;ERROR:pleasesetoraclecompatiblemodefororaclepartit......
  • 使用spring初始化器创建出来的gradle项目,gradle.build.ks文件extra报错的解决方法
    有关讨论:https://github.com/spring-io/initializr/issues/922https://github.com/spring-io/start.spring.io/issues/581springboot生成器:https://start.spring.io/......
  • 端云一体化卡片创建
    端云一体化卡片创建首先,我们创建项目:然后点击登陆:登陆成功之后我们就可以开始后面的步骤了我们需要这个时候,我们点击上面的AppGalleryConnect然后创建项目就可以我这里要做的事端云一体化的卡片。然后下一步然后我们填写如图所示的信息。创建完成之后,我们回来查看我们的项目创建......
  • Java设计模式-原型模式
    简介原型模式是一种创建型设计模式,它允许在运行时通过复制现有对象来创建新对象,而不是通过构造函数创建。这个模式的核心思想是基于一个现有的对象克隆一个新的对象,这个过程对外部世界是透明的,就像对象从未被克隆过一样。原型模式的一个关键优点是可以避免在创建对象时重复性地......