常见设计模式


总体来说设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。

参考自 https://blog.csdn.net/HeroIsUseless/article/details/106722590

代理模式

代理模式的主要优点有:

  1. 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
  2. 代理对象可以扩展目标对象的功能;
  3. 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;

其主要缺点是:

  1. 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
  2. 增加了系统的复杂度;

代理模式的主要角色如下:

  1. 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
  2. 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
  3. 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
package proxy;
public class ProxyTest
{
    public static void main(String[] args)
    {
        Proxy proxy=new Proxy();
        proxy.Request();
    }
}
//抽象主题
interface Subject
{
    void Request();
}
//真实主题
class RealSubject implements Subject
{
    public void Request()
    {
        System.out.println("访问真实主题方法...");
    }
}
//代理
class Proxy implements Subject
{
    private RealSubject realSubject;
    public void Request()
    {
        if (realSubject==null)
        {
            realSubject=new RealSubject();
        }
        preRequest();
        realSubject.Request();
        postRequest();
    }
    public void preRequest()
    {
        System.out.println("访问真实主题之前的预处理。");
    }
    public void postRequest()
    {
        System.out.println("访问真实主题之后的后续处理。");
    }
}
  • 引用自 https://blog.csdn.net/fedorafrog/article/details/104898302?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162581271116780274193523%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162581271116780274193523&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-104898302.first_rank_v2_pc_rank_v29&utm_term=%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187

  • 参考 https://blog.csdn.net/xiaofeng10330111/article/details/105633821?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162581271116780274193523%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162581271116780274193523&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-105633821.first_rank_v2_pc_rank_v29&utm_term=%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187

单例模式

  • 单例模式的功能是用来保证这个类的运行期间只会被创建一个类实例,并提供一个全局唯一访问这个类实例的访问点。
  • 可分为懒汉式(线程不安全)和饿汉式(线程安全)

饿汉式和懒汉式区别:

  • 从名字上来说,饿汉和懒汉,

  • 饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,

  • 而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。

  • 参考 https://blog.csdn.net/jason0539/article/details/23297037?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162579334316780264066667%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162579334316780264066667&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-23297037.first_rank_v2_pc_rank_v29&utm_term=%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187

委派模式

  • 相当于 策略模式 + 代理模式

  • 参考 https://blog.csdn.net/liman65727/article/details/79720352?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162582365716780262531785%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162582365716780262531785&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-79720352.first_rank_v2_pc_rank_v29&utm_term=%E5%A7%94%E6%B4%BE%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187

策略模式

  • 参考 https://blog.csdn.net/youanyyou/article/details/116931663?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162581700216780274186764%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162581700216780274186764&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-116931663.first_rank_v2_pc_rank_v29&utm_term=%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187

原型模式

  • 参考 https://blog.csdn.net/zhengzhb/article/details/7393528?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162582420916780261922603%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162582420916780261922603&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-7393528.first_rank_v2_pc_rank_v29&utm_term=%E5%8E%9F%E5%9E%8B%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187

模板模式

  • 参考 https://blog.csdn.net/qq_20967339/article/details/80504108?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162582466716780261931660%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162582466716780261931660&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-80504108.first_rank_v2_pc_rank_v29&utm_term=%E6%A8%A1%E6%9D%BF%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值