目录
1.java设计模式有哪些
-
创建型模式:
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 原型模式(Prototype Pattern)
- 建造者模式(Builder Pattern)
-
结构型模式:
- 适配器模式(Adapter Pattern)
- 装饰者模式(Decorator Pattern)
- 代理模式(Proxy Pattern)
- 外观模式(Facade Pattern)
- 桥接模式(Bridge Pattern)
- 组合模式(Composite Pattern)
- 享元模式(Flyweight Pattern)
-
行为型模式:
- 策略模式(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的设计模式有怎么作用
-
提供解决方案:设计模式提供了经过验证和广泛应用的解决方案,可以帮助开发人员解决常见的软件设计问题。通过使用设计模式,可以避免重复造轮子,节省开发时间和成本。
-
提高代码可维护性:设计模式强调将功能划分为独立的模块,并定义它们之间的关系。这样可以使代码结构清晰,易于理解和维护。当需要修改或扩展功能时,只需针对特定模块进行修改而不会影响其他部分。
-
提升代码复用性:设计模式提供了一种通用的设计思路和机制,使得开发人员可以将已经验证的设计模式应用到不同的项目中。这样可以提高代码的复用性,减少重复编写相似功能的工作。
-
改善系统性能和可扩展性:某些设计模式,如享元模式、代理模式、迭代器模式等,通过优化资源利用、减少对象创建和增加灵活性等方式,可以改善系统的性能和可扩展性。
-
促进团队合作:设计模式是一种通用的语言,能够帮助开发人员之间更好地进行沟通和理解。团队成员可以共同遵循设计模式的规范,提高代码的一致性,并更好地协作开发项目。
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);