黑马程序员———基础视频中涉及的几个设计模式

 
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
 
package   o_oriented;
/*
  设计模式:
     解决某一问题最行之有效的方法。java中有23种设计模式。
 
  单例设计模式:
     解决一个类在内存只存在一个对象。
 
  思路:
     1.为了避免其他程序过多的建立该类对象,先禁止其他程序访问该类对象。
     2.但又为了其他程序访问到该类对象,则在该类中自定义一个对象。
     3.对外提供一个方法,可以访问该类对象。
 
 步骤:
     1.构造函数私有化。
     2.在类中创建一个本类对象。
     3.创建一个公有方法,获取该类对象。
     
 注意:对于事物,该怎么描述怎么描述,该创建变量则创建变量,该创建功能则创建功能。
     当需要保证该类对象在内存中具有唯一性时,则可以使用单例设计模式。
     
 例如:配置文件。   
            修改配置文件中的参数,修改多次也好,也是修改一个对象的值。
 */
public   class   SingleDemo   {
      public   static   void   main ( String []   args )
     {
              Single   ss   =   Single .   getInstance ();
              ss .   setCountry (   "China" );
              Single   ss1   =   Single .   getInstance ();
              System .   out . println   ( ss1   . getCountry   ());
     }
}

class   Single
{
      private   String   country ;

      public   String   getCountry () {
              return   country   ;
     }

      public   void   setCountry   ( String   country   ) {
              this . country   =   country   ;
     }

      private   Single (){
           
     }
     
      private   static   Single   s   =   new   Single ();
     
      public   static   Single   getInstance ()
     {
              return   s   ;
     }
}


====================================================================================================

package   o_oriented;
/*
  饿汉式:
 class Single {
     private Single(){}
     private static Single s = new Single();
     public static Single getInstance() {
           return s;
     }
 
    这个先初始化对象。
 Single类一进内存,就已经创建好了对象。
 
 注意:在开发时,用饿汉式。懒汉式在面试当中比较常见,通过结合多线程来解释。
 */

public   class   SingleDemo2   {
      public   static   void   main ( String []   args )
     {
           
     }
     
}
/*
 懒汉式:
 对象是方法被调用时,才初始化,也叫做对象的延时加载。
 Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。双重判断机制
 */
class   Single   {
      private   Single (){}
      private   static   Single   s   =   null ;
      public   static   Single   getInstance () {
              if (   s   ==   null )
           {
                   synchronized ( Single   . class )
                {
                        if (   s   ==   null )
                              s   =   new   Single ();
                }
           }
              return   s   ;
     }
}
====================================================================================================
模板方法设计模式:

package   o_oriented2;
/*
  模板方法设计模式
需求:获取一段程序运行的时间。
原理:获取程序开始和结束的时间并相减即可。
     获取时间方法:System.currentTimeMillis();
     
当代码完成优化后,就可以解决这类问题了。
     这种方式,称为模板方法设计模式
     
什么是模板方法?
     在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,
     那么这时就将不确定的部分暴漏出去,由该类的子类去完成。     
     
     保证获取功能唯一,不被复写,用final
 */
public   class   TemplateDemo
{
      public   static   void   main ( String []   args )
     {    
              SubTime   sb   =   new   SubTime ();
              sb .   getTime ();
     }
}

abstract   class   GetTime
{
      public   final   void   getTime ()
     {
              long   start   =   System   . currentTimeMillis ();
              runCode ();
              long   end   =   System   . currentTimeMillis ();
              System .   out . println   ( "time: "   +( end   -   start   ));
     }
     
      public   abstract   void   runCode ();
}

class   SubTime   extends   GetTime
{
      public   void   runCode   ()
     {
              for (   int   x   =   0 ;   x <   4000 ;   x ++)
           {
                   System .   out . println   ( x   );
           }
     }
}

====================================================================================================

package   cn.itcast.IO2;
/*
 装饰设计模式:
     当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
           那么自定义的该类称为装饰类。
     装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。

 */

//普通类
class   Person
{
      public   void   eat   ()
     {
              System .   out . println   ( "吃饭"   );
     }
}

//装饰类,增强Person类的功能。
class   SuperPerson
{
      private   Person   p ;
      SuperPerson (   Person   p )
     {
              this . p   =   p ;
     }
     
      public   void   superEat   ()
     {
              System .   out . println   ( "开胃酒"   );
              p .   eat ();
              System .   out . println   ( "甜点/餐后水果"   );
     }
}

public   class   PersonDemo   {

      public   static   void   main ( String []   args ) {
              Person   p   =   new   Person ();
              SuperPerson   sp   =   new   SuperPerson (   p );
              sp .   superEat ();
     }

}
 
 
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介: 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 本课程内容定位学习设计原则,学习设计模式基础。在实际开发过程,并不是一定要求所有代码都遵循设计原则,我们要考虑人力、时间、成本、质量,不是刻意追求完美,要在适当的场景遵循设计原则,体现的是一种平衡取舍,帮助我们设计出更加优雅的代码结构。本章将详细介绍开闭原则(OCP)、依赖倒置原则(DIP)、单一职责原则(SRP)、接口隔离原则(ISP)、迪米特法则(LoD)、里氏替换原则(LSP)、合成复用原则(CARP)的具体内容。 为什么需要学习这门课程? 你在日常的开发,会不会也遇到过同样的问题。系统出现问题,不知道问题究竟出在什么位置;当遇到产品需求,总是对代码缝缝补补,不能很快的去解决。而且平时工作,总喜欢把代码堆在一起,出现问题时,不知道如何下手,工作效率很低,而且自己的能力也得不到提升。而这些都源于一个问题,那就是软件设计没做好。这门课能帮助你很好的认识设计模式,让你的能力得到提升。课程大纲: 为了让大家快速系统了解设计模式知识全貌,我为您总结了思维导图,帮您梳理学习重点,建议收藏!
黑马程序员的tb_brand是指在JavaWeb基础教程创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类的成员变量保持一致。\[1\]在这个教程,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值