设计模式-单列设计模式

一、什么是设计模式

        是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,它不是语法规定,而是一套用来提高代码复用性、可维护性、可读性、稳健性以及安全性的解决方案。

二、学习设计模式

1.设计模式的本质是面向对象设计原则的实际应用,是对类的封装性、继承性和动态性以及类的关联关系和组合关系的充分理解。

2.正确使用设计模式的优点:

(1)可以提高程序员的思维、编程能力和设计能力

(2)是程序设计更加标准化、代码编程 更加工程化,是软件开发效率大大提高,从而缩短软件的开发周期

(3)使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强

三、设计模式的基本要素

(1)模式名称:根据模块的功能,特点命名;

(2)问题:描述了该模式的应用环境,描述一个模式的前因后果;

(3)解决方案:提供一些解决问题的方法,以及具体实现步骤;

(4)效果:一个模式的优缺点,及时间和空间复杂度;

四、二十三种设计模式(GoF23)

1.创建型模式:单列模式、工厂模式、抽象工厂模式、建造者模式、原型模式

2.结构型模式:适配器模式,桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

3.行为模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

五、面向对象的七大原则(OOP七大原则)

1.开闭原则:对扩展开放,对修改关闭

2.里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立

3.依赖倒置原则:要面向接口编程,不要面向实现编程

4.单一职责原则:控制类的粒度大小、将对象解耦、提高其内聚性

5.接口隔离原则:要为各个类建立他们需要的专用接口

6.迪米特法则:只与你的直接朋友交谈,不跟陌生人说话;即使两个类之间有部分关系不要直接关联,建立第三方类,降低程序模块间的耦合度

7.合成复用原则:尽量先使用组合或聚合等关联关系来实现,其次再考虑使用继承关系来实现

六、模式详细内容

(一)单列设计模式

1.单列模式

        单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。

2.单例模式有 3 个特点:

(1)单例类只有一个实例对象;

(2)该单例对象必须由单例类自行创建;

(3)单例类对外提供一个访问该单例的全局访问点。

3.单例模式的优点:

  • 单例模式可以保证内存里只有一个实例,减少了内存的开销。

  • 可以避免对资源的多重占用。

  • 单例模式设置全局访问点,可以优化和共享资源的访问。

4.单例模式的缺点:

  • 单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则。

  • 在并发测试中,单例模式不利于代码调试。在调试过程中,如果单例中的代码没有执行完,也不能模拟生成一个新的对象。

  • 单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。

(1)饿汉单列模式

public class HungrySingleton {
    private static final HungrySingleton instance = new HungrySingleton();
    private HungrySingleton() {
    }
    public static HungrySingleton getInstance() {
        return instance;
    }
}

(2)懒汉式单列:

package Singleton;
//懒汉式单列模式
public class LazySingleton {

    private static boolean xiaozhang=false;
    private LazySingleton() {
        synchronized (LazySingleton.class){
            if (!xiaozhang){
                xiaozhang=true;
            } else {
                throw new RuntimeException("请勿用反射破坏单列模式!");
            }
        }
    }
    private static LazySingleton lsl;
    public static LazySingleton getInstance(){
        if (lsl==null){
            synchronized (LazySingleton.class){
                if (lsl==null){
                    lsl=new LazySingleton();
                }
            }
        }
        return lsl;
    }
}

(3)枚举

package Singleton;

public enum  EnumSingle {
    INSTANCE;
    public EnumSingle getInstance(){
        return INSTANCE;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值