简单的设计模式1: ----创建型模式

本文介绍了Java设计模式中的单例模式,探讨了懒汉式、饿汉式和双检锁创建方式,并深入剖析了工厂模式(包括简单工厂、工厂方法与抽象工厂),以及代理模式的动态与静态实现。通过实例演示,展示了如何利用这些模式提升代码结构和解耦性。
摘要由CSDN通过智能技术生成

创建型模式

提供了一种在创建对象的同时隐藏创建逻辑的方法,而不是使用new运算符直接实例化对象。

1. 单例模式

  1. 定义
    如果一个类始终只能创建一个实例,则这个类被称为单例类,这种模式就被称为单例模式。
  2. 单例模式优点
    减少创建Java实例所带来的系统开销
    便于系统跟踪单个Java实例的生命周期、实例状态等。
  3. 例子
    比如电脑的任务管理器,只要开一个就好了
  4. 特点
    1)单例类只有一个实例。
    2)单例类必须自己实例化自己,在类中包含实例化,构造器私有。
    3)单例类需要向外提供实例的方法。
  5. 创建方式:
    1)懒汉式:调用方法才进行初始化
public class Singleton {  
    private static Singleton instance;  
    private Singleton (){}  
    public static synchronized Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
    }  
}

2)饿汉式:类加载时就进行初始化

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

3)双检锁/双重校验锁(DCL,即 double-checked locking)(更安全的方法)

public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {  
        synchronized (Singleton.class) {  
            if (singleton == null) {  
                singleton = new Singleton();  
            }  
        }  
    }  
    return singleton;  
    }  
}

2. 工厂模式

2.0 特点

1)可以使代码结构清晰,有效地封装变化
2)对调用者屏蔽具体的产品类
3)降低耦合度

2.1 简单工厂模式

1)创建一个形状接口(里面定义形状)
2)创建多个实现形状接口的实现类(长方形,正方形和圆心)
3)创建一个工厂类,生成基于给定信息的实体对象。
4)创建工厂类实例,给定信息,就能够得到给定的实体对象。

  1. 特点:
    定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
    创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦;

比如:我需要购买一部手机,我不需要知道手机是怎么做出来的,进入创建一个手机工厂类,把手机的品牌放进去,就能够获得指定手机对象。

  1. 特点:

一个抽象产品接口,多个具体产品实现类,一个具体工厂类,进行产品对象生成;

1)每个工厂可以创建多个产品实例,当需要创建新产品的时候,需要修改工厂类不符合java开闭原则
2)用户需要什么类型的产品,告诉工厂类,工厂类就创建什么类型的产品实例。
3)如果需要添加产品,那么就需要额外添加产品实现类和修改具体工厂类

2.2 工厂模式

1个抽象产品类,多个具体产品类,一个抽象工厂类,多个具体工厂类(每个工厂类实生产一种产品)

1)每个工厂只能创建1个产品实例,当需要创建新产品的时候,需要扩展抽象工厂类,而不需要修改,符合java开闭原则
2)用户需要什么类型的产品,就从什么类型的工厂生产
3)如果需要添加产品,那么需要添加产品实现类和具体工厂实现类,很多很烦,虽然解耦了

2.3 抽象工厂模式(有一点难理解)

多个抽象产品类,多个具体产品类,1个抽象工厂类(包含多个抽象产品类),多个具体工厂类(能实现多个抽象产品的某些产品)

1)每个工厂可以创建多个产品实例,当需要创建新产品的时候,需要扩展抽象工厂类,而不需要修改,符合java开闭原则
2)用户需要什么类型的产品,就从什么类型的工厂生产
3)用于生产一组相关或者相互依赖的产品
更加方便,只需要添加集体工厂类,就能实现很大功能。

结构型模式

这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

3. 代理模式

动态代理和静态代理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值