【设计模式】

常用设计模式日记

参考资料:https://www.runoob.com/design-pattern/design-pattern-tutorial.html

设计模式原则

  • 重要原则
    高聚合低耦合
  • 开闭原则
    对扩展开放,对修改关闭
  • 接口隔离原则
    使用多个隔离的接口,比使用单个接口要好,降低类之间的耦合度

设计模式类型

设计模式通常分创建型模式 结构型模式 行为型模式。

  • 创建型模式
    1, 工厂模式
    关键特征:创建过程在其子类执行。工厂根据不同的类型创建不同的子类对象。
    2,抽象工厂模式
    关键特征:在一个工厂里聚合多个同类产品。多个工厂模式的组合。,
    3, 单例模式(Singleton)
    单例类必须自己创建自己的唯一实例
    懒汉式: 需要的时候才建自己的唯一实例
    饿汉式: 类加载时就建自己的唯一实例,建议使用此法。
    public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){}
    public static Singleton getInstance() {
    return instance;
    }
    }
    意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    主要解决:一个全局使用的类频繁地创建与销毁。
    如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
    关键特征:构造函数是私有的。对外getInstance是静态的。
    4,原型模式(Prototype)
    基于现有对象模板,通过克隆方式创建对象的模式
    利用已有的一个原型对象,快速地生成和原型对象一样的实例
    关键特征:大量创建相同或者相似的对象,并把它们存储在一个 Hashtable 中。 ,
    5, 建造者模式(Builder)
    使用多个简单的对象一步一步构建成一个复杂的对象,将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
    关键特征:
    创建一个Builder类专门负责创建具体对象
    建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系
  • 结构型模式
    1, 适配器模式
    意图:作为两个不兼容的接口之间的桥梁,主要是兼容接口。
    关键特征:适配器继承或依赖已有的类,不改变已有的类,实现想要的目标接口 。
    应用实例: Play: mp3 mp4 vlc,
    2, 桥接模式
    意图:将抽象部分与实现部分分离,使它们都可以独立的变化。
    关键特征: 分类分离接口,减少它们之间耦合
    3, 外观模式:
    在现有的系统添加一个接口,来隐藏系统的复杂性。创建一个外观类,在外观类内把相关的对象分类创建。并实现各自的调用方法。
    关键特征:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。
public class ShapeMaker {
				   private Shape circle;
				   private Shape rectangle;
				   private Shape square;
				   public ShapeMaker() {
				      circle = new Circle();
				      rectangle = new Rectangle();
				      square = new Square();
				   }
				   public void drawCircle(){
				      circle.draw();
				   }
				   public void drawRectangle(){
				      rectangle.draw();
				   }
				   public void drawSquare(){
				      square.draw();
				   }
				}

4, 装饰模式:
装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
何时使用:在不想增加很多子类的情况下扩展类。
关键特征: 1、Component 类充当抽象角色,不应该具体实现。 2、修饰类引用和继承 Component 类,具体扩展类重写父类方法。

@Override
				   public void draw() {
				      decoratedShape.draw();         
				      setRedBorder(decoratedShape);
				   }
  • 行为型模式
    1,观察者模式:当一个对象被修改时,则会自动通知依赖它的对象
    意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
    主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
    何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
    关键特征:在抽象类里有一个 ArrayList 存放观察者们。
    2, 责任链模式:
    意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
    主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
    何时使用:在处理消息的时候以过滤很多道。
    如何解决:拦截的类都实现统一接口。
    关键特征:抽象处理类
    主要包含一个指向下一处理类的成员变量 nextHandler 和一个处理请求的方法 handRequest,handRequest 方法的主要思想是,如果满足处理的条件,则有本处理类来进行处理,否则向下传递由 nextHandler 来处理
    3, 命令模式:
    如何解决:通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。
    关键特征:定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口
    4, 迭代器模式:
    意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
    主要解决:不同的方式来遍历整个整合对象。
    何时使用:遍历一个聚合对象。
    如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。
    关键特征:定义接口:hasNext, next。
    5, 策略模式:
    意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
    主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
    何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
    如何解决:将这些算法封装成一个一个的类,任意地替换。
    关键特征:不同的算法实现同一个接口。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值