23种设计模式(附代码样例)

平常看的设计模式有很多,就强迫症的都总结起来。(文章底部 有对此文章的总结梳理 哦!采纳一下吧!)

一、设计模式分类
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式

二、设计模式的六大原则
1.开闭原则(Open Close Principle)
开闭原则就是说对扩展开放,对修改关闭。在程序需要进行扩展的时候,不能去修改原有代码,实现一个热插拔的效果。
所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会体会到这点

2.里氏代换原则(Liskov Substitution Principle)LSP
面向对象设计的基本原则之一。里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。
LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。
而基类与子类的继承关系就是抽象化的具体体现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3.依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

4.接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这个我们看出,其实设计模式就是一个软件的设计思想,
从大型软件架构出发,为了升级和维护方便,要降低依赖,降低耦合

5.迪米特法则(最少知道原则)(Demeter Principle)
为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立

6.合成复用原则(Composite Reuse Principle)
原则是尽量使用合成、聚合的方式,而不是使用继承。

三、Java的23种设计模式

1.工厂方法模式(Factory Method)

2.单例模式(Singleton)

3.建造者模式(Builder)

4.原型模式(Prototype)

5. 适配器模式(Adapter)

6. 装饰模式(Decorator)

7. 代理模式(Proxy)

8. 外观模式(Facade)

9. 桥接模式(Bridge)

10. 组合模式(Composite)

11.享元模式(Flyweight)

12.策略模式(strategy)

13.模板方法模式(Template Method)

14.观察者模式(Observer)

15.迭代子模式(Iterator)

16.责任链模式(Chain of Responsibility)

17.命令模式(Command)

18.备忘录模式(Memento)

19.状态模式(State)

20.访问者模式(Visitor)

22.中介者模式(Mediator)


23.解释器模式(Interpreter)


(细心的你 会发现我的文章只有22种 回顾一下工厂方法模式 “抽象了解一下!")

对上述设计模式也进行了总结和梳理——总结23种设计模式系统梳理

此文章大部分是博主自己手写,现已整理完毕,看完感觉可以,留个小心心。

作者:Mr.Ph

博客:https://blog.csdn.net/panzihao_beijing(转载请说明出处)



  • 27
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java设计模式 (含有相关源码) Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使之可以独立变化。 Chain of Responsibility:为解除请求的发送者和接收者之间的耦合,而使多个对象有机会处理这个请求。将这些请求连成一个链,并沿着这条链传递该请求,直到有个对象处理它。 Command:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可以取消的操作。 Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。 Decorator:动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更加灵活。 Facade:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,使得这个子系统更加容易使用。 Factory Method:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method让一个类的实例化延迟到子类。 Flyweight:运用共享技术有效的支持大量细粒度的对象。 Interpreter:给定一个语言,定义它的文法的一表示,并定义一个解释器用于解释特定文法。 Iterator:提供一方法顺序访问一个聚合对象中的各元素,而无需暴露该对象的内部表示。 Mediator:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式相互引用,从而使得耦合松散,可以独立改变相互之间的交互。 Memento:不破坏封装的前提下,捕获对象的内部状态,并在该对象之外保存这个状态。 Observer:定义对象间的一一对多的依赖关系,以便当一个对象的状态发生变化时依赖于它的所有的对象都得到通知和刷新。 Prototype:用原型实例指定创建对象的类,并且通过拷贝这个原型来创建新的对象。 Proxy:为其他对象提供一个代理以控制对这个对象的访问。 Singleton:保证一个类仅有一个实例,并提供一个访问它的全局点。 State:允许一个对象再内部状态改变的时候改变它的行为。对象看起来似乎修改了所属的类。 Strategy:定义一系列的算法,把他们封装起来,并可以相互替换,使算法独立于客户。 Template Method:定义一个操作中的算法骨架,而将这些算法的具体实现的代码延迟到子类中完成。 Visitor:标识一个作用于某对象结构中的各元素的操作,在不改变各元素的类的前提下定义作用于这个元素的新操作。
Java中较为常用的设计模式有很多,以下是其中几代码样例: 1. 单例模式(Singleton Pattern): ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 2. 工厂模式(Factory Pattern): ```java public interface Shape { void draw(); } public class Circle implements Shape { @Override public void draw() { System.out.println("Drawing a circle"); } } public class Rectangle implements Shape { @Override public void draw() { System.out.println("Drawing a rectangle"); } } public class ShapeFactory { public Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } else if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } return null; } } ``` 3. 观察者模式(Observer Pattern): ```java public interface Observer { void update(); } public class ConcreteObserver implements Observer { @Override public void update() { System.out.println("Observer is updated"); } } public interface Subject { void attach(Observer observer); void detach(Observer observer); void notifyObservers(); } public class ConcreteSubject implements Subject { private List<Observer> observers = new ArrayList<>(); @Override public void attach(Observer observer) { observers.add(observer); } @Override public void detach(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { for (Observer observer : observers) { observer.update(); } } } ``` 这些是常见的设计模式代码样例,每个设计模式都有不同的用途和实现方式,可以根据具体的需求选择适合的设计模式来解决问题。 #### 引用[.reference_title] - *1* [【Java中23面试常考的设计模式之装饰器模式(Decorator)---结构型模式】](https://blog.csdn.net/Coder_ljw/article/details/127610171)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [JAVA设计模式之单例模式](https://blog.csdn.net/qq_19843217/article/details/131130466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值