首页 > 其他分享 >《图解设计模式》 第三部分 生成实例

《图解设计模式》 第三部分 生成实例

时间:2024-11-04 18:49:30浏览次数:3  
标签:Product 图解 null Factory 模式 instance 实例 设计模式 public

第五章 Singleton 模式

单例模式应该是开发中用的比较多的模式。这里我只记一个知识点。
多线程下安全的单例模式的一个知识点

public class Singleton{
   public static InstanceClass instance = null;
   public static Singleton getInstance(){
    if(instance == null){
      sychronized{
        if(instance == null){
          instance = new InstanceClass();
        }
      }
    }
  }
}

这里为什么要 判断两次 instance == null ?

因为 sychronized 是重量级锁(Java早期版本),这是因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高
因此提前 判断 是否为 null, 可以防止之后的程序一直去尝试获得锁。

第六章 Prototype 模式

Manager 类将各种原型类记录在一个HashMap里

    public class Manager {
        private HashMap<String,Product> showcase = new HashMap();

        public void register(String name, Product proto) {
            showcase.put(name,proto);
        }

        public Product create(String protoName) {
            Product product = (Product) showcase[protoName];
            return product.createClone();
        }
    }

接口 Product 类需要继承 Cloneable
当 Product 的子类可以通过clone 直接获取到相关类实现

publci class UnderlinePen implements Product{
  /*
  *省略
  */

  public Product createClone(){
    Product p = null;
    try{
      p = (Product) clone();
    } catch (CloneNotSupportedException e){
      e.printStachTrace();
    }
    return p;
  }
}

Messager 只需要创建的时候 根据实例名称 返回对应的克隆对象即可。

第七章 Build 模式

没什么讲的,使用的时候传入不同的 Builder 然后通过 Dirctor类 去执行 construct , 最后getResult 结果就可以了。

和Teamplete Method 模式有什么异同?

Teamplete Method 只有接口和实现类,接口通过 为 finnal 方法 控制行为。【finnal 就是为了防止子类修改】
但是Build 却是 Dirctor 的 construct 方法去控制行为。

第八章 Abstract Factory 模式

Builder 模式 和 Abstract Factory 模式 的关系

Abstract Factory 模式通过调用抽象产品接口来组成抽象产品,生成具有发杂结构的实例。
Builder 则是分阶段的制作发杂实例。
前者更强调组件化,因为组件多所以有 “工厂” 一说。后者则是只是负责调用,感觉操作性不是很强。

Factory Method 和 Abstract Factory 模式 的关系

抽象工厂 用到了 Factory Method 模式

标签:Product,图解,null,Factory,模式,instance,实例,设计模式,public
From: https://www.cnblogs.com/dasuxd/p/18525930

相关文章

  • MySQL8.0安装配置教程【超级详细图解】
    万分感谢.参考文章内容:https://blog.csdn.net/m0_73442728/article/details/131359479万分感谢.参考文章内容:https://blog.csdn.net/qq_40187702/article/details/130618805目录**一、MySQL下载与安装二、MySQL安装三、MySQL连接测试四、配置环境变量一、MySQL下载与安......
  • 实例化对象有哪几种方式
    1.**new关键字**  Useruser=newUser(); 2.**clone()方法**  UserclonedUser=originalUser.clone();3.**通过反射机制创建**  Class<?>cls=Class.forName("com.dao.User");  Useru=(User)cls.newInstance();4.**序列化反序列化**  序列化是......
  • 实例化对象有哪几种方式
    1.**new关键字**  Useruser=newUser(); 2.**clone()方法**  UserclonedUser=originalUser.clone();3.**通过反射机制创建**  Class<?>cls=Class.forName("com.dao.User");  Useru=(User)cls.newInstance();4.**序列化反序列化**  序列化是......
  • 《图解设计模式》 第一部分,适应设计模式
    第一章Iterator模式--一个一个遍历为什么要使用Iterator模式?正常遍历我们使用for循环即可,为什么要在集合引入Iterator这个角色呢?egwhile(it.hasNext()){Bookbook=(Book)it.next();System.out.println(book.getName());}这里的while循环并不依赖于Boo......
  • Spring7中事务传播机制形象图解
    一、Spring的7种事务传播机制Spring事务传播机制是指在多个事务方法相互调用的情况下,事务如何在方法之间进行传播和管理的机制。通过事务传播机制,可以控制事务的范围和行为,保证多个事务方法的一致性和完整性。Spring提供了七种事务传播行为,分别是:REQUIRED、SUPPORTS、MANDATORY......
  • 手把手教你学simulink(8.37)--基于Simulink的电机仿真实例
    目录基于Simulink的电机仿真实例1.创建Simulink模型2.构建模型3.连接模块4.设置参数5.运行仿真6.结果分析示例模型图总结基于Simulink的电机仿真实例Simulink是MATLAB中的一个图形化仿真工具,广泛用于控制系统、信号处理、通信系统等领域。下面是一个基于......
  • 如何区分实例化网格中的每个实例
    1)如何区分实例化网格中的每个实例2)项目在模拟器上切换程序后有概率画面冻结3)Unity工程导入团结引擎,GUID会变化,导致引用关系丢失4)Mask在Android平台下渲染异常这是第407篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握......
  • Linux-shell实例手册-磁盘
    本文主要介绍在Linux下关于磁盘的操作,如磁盘常用命令、创建swap文件方法,磁盘挂载,raid原理等。记得点赞,收藏方便随时查看。文章目录1磁盘常用Linux命令2 创建swap文件方法3 新硬盘挂载4raid原理与区别1磁盘常用Linux命令  df-Ph             ......