常用设计模式

传送门: 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!");
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值