单例模式和反射模式如何使用

目录

1.java设计模式有哪些

2.java的设计模式有怎么作用

3.单例模式

        1.什么是单例模式

        2.懒汉式

        1.特征

        2.使用

        3.饿汉式

                1.特征

                2.使用

4.反射模式

        1.通过反射模式获取公有属性

               ​编辑

        2.通过反射模式获取私有属性

        3.通过反射模式获取公有方法

        4.通过反射模式获取私有方法


1.java设计模式有哪些

  1. 创建型模式

    • 工厂模式(Factory Pattern)
    • 抽象工厂模式(Abstract Factory Pattern)
    • 单例模式(Singleton Pattern)
    • 原型模式(Prototype Pattern)
    • 建造者模式(Builder Pattern)
  2. 结构型模式

    • 适配器模式(Adapter Pattern)
    • 装饰者模式(Decorator Pattern)
    • 代理模式(Proxy Pattern)
    • 外观模式(Facade Pattern)
    • 桥接模式(Bridge Pattern)
    • 组合模式(Composite Pattern)
    • 享元模式(Flyweight Pattern)
  3. 行为型模式

    • 策略模式(Strategy Pattern)
    • 观察者模式(Observer Pattern)
    • 命令模式(Command Pattern)
    • 职责链模式(Chain of Responsibility Pattern)
    • 迭代器模式(Iterator Pattern)
    • 中介者模式(Mediator Pattern)
    • 备忘录模式(Memento Pattern)
    • 解释器模式(Interpreter Pattern)
    • 状态模式(State Pattern)
    • 访问者模式(Visitor Pattern)
    • 模板方法模式(Template Method Pattern)

2.java的设计模式有怎么作用

        

  1. 提供解决方案:设计模式提供了经过验证和广泛应用的解决方案,可以帮助开发人员解决常见的软件设计问题。通过使用设计模式,可以避免重复造轮子,节省开发时间和成本。

  2. 提高代码可维护性:设计模式强调将功能划分为独立的模块,并定义它们之间的关系。这样可以使代码结构清晰,易于理解和维护。当需要修改或扩展功能时,只需针对特定模块进行修改而不会影响其他部分。

  3. 提升代码复用性:设计模式提供了一种通用的设计思路和机制,使得开发人员可以将已经验证的设计模式应用到不同的项目中。这样可以提高代码的复用性,减少重复编写相似功能的工作。

  4. 改善系统性能和可扩展性:某些设计模式,如享元模式、代理模式、迭代器模式等,通过优化资源利用、减少对象创建和增加灵活性等方式,可以改善系统的性能和可扩展性。

  5. 促进团队合作:设计模式是一种通用的语言,能够帮助开发人员之间更好地进行沟通和理解。团队成员可以共同遵循设计模式的规范,提高代码的一致性,并更好地协作开发项目。

3.单例模式

 

        1.什么是单例模式

                1、单例类只能有一个实例。

                2、单例类必须自己创建自己的唯一实例。

                3、单例类必须给所有其他对象提供这一实例。

        2.懒汉式

        1.特征

线程不安全    是否 Lazy 初始化:是    是否多线程安全:否    实现难度:易

        2.使用

        

package com.cskt;

public class Singleton {
    //定义私有的构造函数 禁止创建对象
    private Singleton() {
    }
    //定义我们需要设置为单例的对象 设置为私有的静态
    private static Singleton singleton;
    //定义一个公有的获取对象方法
    public static Singleton getSingleton(){
        //判断单例对象是否创建
        if(singleton==null){
            singleton=new Singleton();
        }
        //返回单例对象
        return singleton;
    }
}

        3.饿汉式

                1.特征

线程安全      是否 Lazy 初始化:是 是否多线程安全:是 实现难度:易

                2.使用

package com.cskt;

public class Singleton1 {
    //定义私有的构造函数 禁止创建对象
    private Singleton1() {
    }
    //定义我们需要设置为单例的对象 设置为私有的静态
    private static Singleton1 singleton=new Singleton1();
    //定义一个公有的获取对象方法
    public static synchronized Singleton1 getSingleton(){
        //返回单例对象
        return singleton;
    }
}

4.反射模式

        1.通过反射模式获取公有属性

               

 

//反射模式 获取属性
        Class<?> aClass = Class.forName("domain.book");
        Constructor<?> constructor = aClass.getConstructor();
        book book = (domain.book)constructor.newInstance();
        //获取公有的属性
        System.out.println(book.id);

        2.通过反射模式获取私有属性

 

//反射模式 获取属性
        Class<?> aClass = Class.forName("domain.book");
        Constructor<?> constructor = aClass.getConstructor();
        book book = (domain.book)constructor.newInstance();
        //开启私有的访问
        file.setAccessible(true);
        file.set(book,"张山");
        System.out.println(book.toString());
        //给所有属性赋值
        Field[] files=aClass.getFields();
        for (Field filed:files) {
            filed.set(book,123);
        }

        3.通过反射模式获取公有方法

 

//反射模式 获取方法
        Class<?> aClass = Class.forName("domain.book");
        Constructor<?> constructor = aClass.getConstructor();
        book book = (domain.book)constructor.newInstance();
        //获取公有的方法
        book.show();

        4.通过反射模式获取私有方法

 

//反射模式 获取方法
        Class<?> aClass = Class.forName("domain.book");
        Constructor<?> constructor = aClass.getConstructor();
        book book = (domain.book)constructor.newInstance();
        //获取公有的方法
        book.show();
        //获取私有的方法
        Method method=aClass.getDeclaredMethod("show1");
        //开启私有的访问
        method.setAccessible(true);
        method.invoke(book);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值