面向对象设计模式

本文详细介绍了设计模式中的单例模式、枚举与享元模式,包括它们的基本概念、实现方式及应用实例。单例模式确保一个类只有一个实例并提供全局访问点,枚举提供了强大的类型安全机制,而享元模式则通过共享技术有效支持大量细粒度对象,减少内存使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。今天学习了三个设计模式,故博客一篇以记之。
单例模式(Singleton) 保证一个类仅有一个实例,并提供一个访问它全局访问点。

一般Singleton模式通常有几种种形式:
 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

第一种形式(饱汉模式)此模式实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间 

public class Singleton {

private Singleton(){        }                                   //注意这是private 只供内部调用 

      private static Singleton instance = new Singleton();

      //这里提供了一个供外部访问本class的静态方法,可以直接访问  

      public static Singleton getInstance() {

        return instance;   

      }

   }

   第二种形式(饥汉模式):这个方法比上面有所改进,不用每次都进行生成对象,只是第一次,使用时生成实例,提高了空间效率!

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  if (instance==null)

    instance=new Singleton();

         return instance;   

  }

枚举(Enum)  jdk1.5提供

 public enum SingleTon{

            ONE;

      }

享元模式(Flyweight) 用共享技术有效地支持大量细粒度的对象。
 它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。采用这种设计模式可以避免大量相同的内容的开销这种开销中最常见、直观的就是内存的损耗。享元模式中区分了内蕴状态和外蕴状态;内蕴就是共性,外蕴就是个性。

三、结构

           先从简单的入手,看看单纯享元模式的结构。

1)        抽象享元角色:为具体享元角色规定了必须实现的方法,而外蕴状态就是以参数的形式通过此方法传入。在Java中可以由抽象类、接口来担当。

2)        具体享元角色:实现抽象角色规定的方法。如果存在内蕴状态,就负责为内蕴状态提供存储空间。

3)        享元工厂角色:负责创建和管理享元角色。要想达到共享的目的,这个角色的实现是关键!

4)        客户端角色:维护对所有享元对象的引用,而且还需要存储对应的外蕴状态。

来用类图来形象地表示出它们的关系吧:

由于享元模式的复杂性和享元模式一般是解决系统性能问题的,所以经常用于底层开发,在项目开发中并不常用。java中很多地方都用到了享元模式比如:String类,
string s1 = "abc";
string s2 = "abc";

Console.WriteLine(Object.ReferenceEquals(s1, s2));
输出的结果为True。说明只第一次创建了一个字符串对象s1,下次再创建相同的字符串s2时只是把它的引用指向s1所引用的具体对象,这就实现了相同字符串在内存中的共享。
工厂模式( Factory)主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。感觉有点像多态中的父类引用指向子类对象。我这里只介绍下我理解的简单工厂模式:
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。

       先来看看它的组成:

1)        工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

2)        抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

3)        具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。



在面向对象编程时要多使用模式。用的多了自然就熟了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值