传送门: https://www.runoob.com/design-pattern/design-pattern-tutorial.html
1. 工厂模式
应用场景: 如果多个类框架类似,且具有一些同名的方法,则可以将这些同名的方法集中在一起,写一个父类。
举例:
public abstract class Animal{
// 定义一个抽象方法,由子类去实现。
abstract void communicate();
// 通用方法,直接在父类定义即可,子类就不需要写重复代码了。
void breath(){
System.out.println("Animal breath.");
}
}
public class Human extends Animal{
@Override
public void communicate() {
System.out.println("Human communicate.");
}
}
public class Cat extends Animal{
@Override
public void communicate() {
System.out.println("Cat communicate.");
}
}
2. 单例模式
应用场景:用于保证一个类只有一个实例对象,像Spring容器就是典型的单例模式。
举例:实现方式有很多,一般用下面这种,线程安全,而且性能较好。
public class Singleton {
// 使用volatile保证多线程情景下,数据同步
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
// 只有singleton为null,需要实例化对象时才用synchronized修饰,性能较好
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
3. MVC模式
应用场景:家喻户晓,SpringMVC。
举例:
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
- Model(模型) :模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
- View(视图) :视图代表模型包含的数据的可视化。 -
- Controller(控制器):控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开
4. 数据访问对象模式(DAO模式)
应用场景:Mybatis。
举例:
@Setter
@Getter
public class Student {
private String name;
private String no;
}
public interface EmployeeMapper {
int delete(Student student );
int update(Student student );
int insert(Student student );
}
具体实现,在EmployeeMapper.xml中,略
5. 组合模式
应用场景:自己包含自己,又叫部分整体模式。如果想用java自己定义链表,可以采用此模式。
举例:
@Setter
@Getter
public class Node{
private String name;
private String no;
private Node next;
// 构造函数
public Node(String name, String no, Node next) {
this.name = name;
this.no= no;
this.next = next;
}
// 构造函数
public Node(String name, String no) {
this.name = name;
this.no= no;
this.next = null;
}
}
// 链表遍历
public void traversal(Node head) {
Node node = head;
while (node != null) {
System.out.println(node.getNo() + " " + node.getName());
node = node.getNext();
}
}
6. 中介者模式
应用场景:聊天室。
举例:
public class ChatRoom {
public static void showMessage(User user, String message){
System.out.println(new Date().toString()
+ " [" + user.getName() +"] : " + message);
}
}
@Setter
@Getter
public class User {
private String name;
public User(String name){
this.name = name;
}
public void sendMessage(String message){
ChatRoom.showMessage(this,message);
}
}
public class MediatorPatternDemo {
public static void main(String[] args) {
User robert = new User("Robert");
User john = new User("John");
robert.sendMessage("Hi! John!");
john.sendMessage("Hello! Robert!");
}
}