zoukankan      html  css  js  c++  java
  • 设计模式之Singleton模式和Strategy模式是什么

    Singleton模式

    单例模式,也交单子模式,有时候系统只需要拥有一个全局对象。

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

    一个类的返回对象一个引用(并且还是同一个)和一个获得该实例的方法(通常是getInstance)

    如果调用这个方法为空的话,就创建一个实例;如果调用这个方法不为空的话,就返回这个引用。

    public class SingleObject {
    
       //创建 SingleObject 的一个对象
       private static SingleObject instance = new SingleObject();
    
       //让构造函数为 private,这样该类就不会被实例化
       private SingleObject(){}
    
       //获取唯一可用的对象
       public static SingleObject getInstance(){
          return instance;
       }
    
       public void showMessage(){
          System.out.println("Hello World!");
       }
    }
    
    
    public class SingletonPatternDemo {
       public static void main(String[] args) {
    
          //不合法的构造函数
          //编译时错误:构造函数 SingleObject() 是不可见的
          //SingleObject object = new SingleObject();
    
          //获取唯一可用的对象
          SingleObject object = SingleObject.getInstance();
    
          //显示消息
          object.showMessage();
       }
    }
    
    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  
        public static synchronized Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
        }  
    }
    
    

    instance就是一个静态对象,在全局是唯一的,在内存空间上是固定的。

    A,静态对象的数据在全局是唯一的,一改都改。如果你想要处理的东西是整个程序中唯一的,弄成静态是个好方法。 非静态的东西你修改以后只是修改了他自己的数据,但是不会影响其他同类对象的数据。

    B,引用方便。直接用 类名.静态方法名 或者 类名.静态变量名就可引用并且直接可以修改其属性值,不用get和set方法。

    C,保持数据的唯一性。此数据全局都是唯一的,修改他的任何一处地方,在程序所有使用到的地方都将会体现到这些数据的修改。有效减少多余的浪费。

    D,static final用来修饰成员变量和成员方法,可简单理解为“全局常量”。对于变量,表示一旦给值就不可修改;对于方法,表示不可覆盖。参考

    参考

    Strategy 模式

    在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。

    简而言之,人说人话,鬼说鬼话。

    如果我做A,就用A的相关算法

    如果我做B,就用B的相关算法

    EX:出行旅游

    我们可以有几个策略可以考虑:可以骑自行车,汽车,做火车,飞机。每个策略都可以得到相同的结果,但是它们使用了不同的资源。选择策略的依据是费用,时间,使用工具还有每种方式的方便程度 。

    Ex:排序策略

    某系统提供了一个用于对数组数据进行操作的类,该类封装了对数组的常见操作,

    如查找数组元素、对数组元素进行排序等。现以排序操作为例,使用策略模式设计该数组操作类,

    使得客户端可以动态地更换排序算法,可以根据需要选择冒泡排序或选择排序或插入排序,

    也能够灵活地增加新的排序算法。


    想要看到更多玮哥的学习笔记、考试复习资料、面试准备资料?想要看到IBM工作时期的技术积累和国外初创公司的经验总结?

    敬请关注:

    玮哥的博客 —— CSDN的传送门

    玮哥的博客 —— 简书的传送门

    玮哥的博客 —— 博客园的传送门

  • 相关阅读:
    什么是根文件系统
    构建基本的嵌入式Linux根文件系统
    “文件系统”与“根文件系统”详解
    C#中NameValueCollection类用法详解
    别把西红柿连续种在同一块地里
    asp.net 服务器控件的 ID,ClientID,UniqueID 的区别
    不要为框架作过多的假设
    构件技术
    asp.net中控件id,clientid,uniqueid的区别
    系统架构图怎么画
  • 原文地址:https://www.cnblogs.com/vigorz/p/10501942.html
Copyright © 2011-2022 走看看