# design-pattern **Repository Path**: ganyipeng/design-pattern ## Basic Information - **Project Name**: design-pattern - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-07 - **Last Updated**: 2024-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 1、单例模式 ### 1、概念 > 私有构造函数 ### 2、UML类图 ![单例模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuKhEIImkLWZEp4lFINK6iQkv51HqaGMi53BpWChpabFHPJGqWIBQg6hJKqiyeSg1qhLSI98Akhfso8gv75BpKe1k0000) ### 3、java示例代码 ```java public class SingleClass { // 静态私有实例 private static SingleClass instance = new SingleClass(); // 私有构造函数 private SingleClass(){} // 静态公共方法 public static SingleClass getInstance(){ return instance; } } ``` ## 2、工厂模式 ### 1、概念 > 具体的工厂产生具体的子类 ### 2、UML类图 ![工厂模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbK8ACfFAKqkuKhEIImkXl4S5J9p2t9ISrFpIegngt0YgC8PcmfCYzqIaqloYoghkHGKj65YLkcf9L2cXYPNBSHSD0t8JgJKB2SgckLCfbbSg6eLz8303Xvkw7v7bdH4atL2aNL2atL6aNNcSaZDIm6c2000) ### 3、java示例代码 ```java interface Product{} class ProductA implements Product{} class ProductB implements Product{} class ProductC implements Product{} interface ProductFactory{ Product getProduct(); } class ProductFactoryA implements ProductFactory{ public Product getProduct(){ return new ProductA(); } } class ProductFactoryB implements ProductFactory{ public Product getProduct(){ return new ProductB(); } } class ProductFactoryC implements ProductFactory{ public Product getProduct(){ return new ProductC(); } } ``` ## 3、抽象工厂模式 ### 1、概念 > 具体工厂产生一系列具体对象 ### 2、UML类图 ![抽象工厂模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbK8ACfFAKqkSSGKSkBYIiv9B2w6Ap5KoCmjo4dDJSqhGGYYgd52LeFJ82CY33B2QX2cAzqIaqloYoghkHGKjE5cMQMdbi3O6fh8Kav8Kav0gLg8jMYc8Vk2fXOPqS8YBbI35FI0m0vk4bvP9oxqW43HQuXNsWbTsWXLjn5UQISZBeVKl1HWwWG0) ### 3、java示例代码 ```java interface ProductA{} interface ProductB{} class ProductA1 implements ProductA{} class ProductB1 implements ProductB{} class ProductA2 implements ProductA{} class ProductB2 implements ProductB{} interface ProductFactory{ public ProductA getProductA(){} public ProductB getProductB(){} } class ProductFactory1 implements ProductFactory{ public ProductA getProductA(){ return new ProductA1(); } public ProductB getProductB(){ return new ProductB1(); } } class ProductFactory2 implements ProductFactory{ public ProductA getProductA(){ return new ProductA2(); } public ProductB getProductB(){ return new ProductB2(); } } ``` ## 4、装饰器模式 ### 1、概念 > 相同父类且关联具体子类,起到增加功能的目的 ### 2、UML类图 ![装饰器模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbK8ACfFAKqkgUPIKD1MAClFJB5AoG_EpqqDoSZCIzVGvAhbuahEIImkXYbqLCZCBSX9pKtDAoach1bLhqjgSdvHOab-4GupT64Sgm883J8NGxC6L40JZvCnBDG30ZkOKLmEgNafm6000000) ### 3、java示例代码 ```java interface Product{ public void doSomeThing(); } class ProductA implements Product{ public void doSomeThing(){ } } class ProductDecorator implements Product{ private Product product; public ProductDecorator(Product product){ this.product = product; } public void doSomeThing(){ // 做一些事情 product.doSomeThing(); // 做另外一些事情 } } ``` ## 5、适配器模式 ### 1、概念 > 起到类型转换的目的 ### 2、UML类图 ![适配器模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbLmvE9ApaaiBbPmKiZCBSX9pKtDAob6Y3gc91O0bQB8LNCfAEWgE5abMGCPsZ0b6awQNBLSN30DUdOAJbmEgNafGEi0) ### 3、java示例代码 ```java interface A{} class B implements A{} class Adapter implements A{ B b; public Adapter(B b){ this.b = b; } } ``` ## 6、观察者模式 ### 1、概念 > 一个类的变化能触发多个其他类的监听 ### 2、UML类图 ![观察者模式类图](https://www.plantuml.com/plantuml/png/TSx12i8m3CRnUvuYnmtf2qoHJQ-2pr3N30ffAqqs5F7TzT2g1tVxoly7JIzgiyw1mKUbFDcHy7mHoWjb6DcAV9u3-d1b2XHLripXhodecABIJH-0QF3aHNTLx3jCPShsdJUu9EywjCvLqjJH_lIOr4_tWRb6QLfu0fIVC1dplQAdwER0Bm00) ### 3、java示例代码 ```java interface Observer{ void xxx(); } class ObserverA implements Observer{ public void xxx(){ // aaa } } class ObserverB implements Observer{ public void xxx(){ // bbb } } class Context{ private List: observers; public void addObserver(Observer observer){ this.observers.add(observer); } public void notifyAllObservers(){ this.observers.forEach(observer->observer.xxx()); } } ``` ## 7、外观模式 ### 1、概念 > 不同类多个方法的调用,集中到一个类一个方法的调用中 ### 2、UML类图 ![外观模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuKhEIImkLd06aOxLN0eAsWfb-Paf2hcf9HdvAOuQcboro4gSC9GueIjnnb3YZAx4BJ4vCIKLGrq4M1qNaX85FJqxgDkm2pjX5tRcSaZDIm5w3m00) ### 3、java示例代码 ```java class ClassA{ void methodA(){} } class ClassB{ void methodB(){} } class ClassC{ void methodC(){} } class ClassFacade{ void methodX(){ new ClassA().methodA(); new ClassB().methodB(); new ClassC().methodC(); } } ``` ## 8、状态模式 ### 1、概念 > 关联状态,状态变化会导致行为变化 ### 2、UML类图 ![状态模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbK8BaaiIQtcKb3GLaZ93yxFJIt9oCnBrt3E1wgeAD7agkLApaaiBeQeCrJ8p2t8ISrDpIif9asd4JaweG8WbReGJLOAnI0AhBKiFpC5o4yj0SjeW4bD34D1fd513LBGqxE3cCFba9gN0Wm80000) ### 3、java示例代码 ```java interface State{ public void doSomething(Context); } class State1 implements State{ public void doSomething(Context){} } class State2 implements State{ public void doSomething(Context){} } class Context{ private State state; public void setState(State state){ this.state = state; } public void doSomething(){ state.doSomething(); } } ``` ## 9、策略模式 ### 1、概念 > 关联策略,策略变化会导致行为变化 ### 2、UML类图 ![策略模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbK8oC_9JAwivb9Gq5P8oG_EpqqjoSZCIzTmpWSggIZHvAhbIiv9B2w6AZHKoCmjo4dDJSqhAIPLhn5PUg4289MwK5rM2WLW6govB3ypnKgXEBK48gS1eJGn30QPo0KrJ45Fpmvg5fT3QbuAC4W0) ### 3、java示例代码 ```java interface Policy{ public void doSomething(Context); } class Policy1 implements Policy{ public void doSomething(Context){} } class Policy2 implements Policy{ public void doSomething(Context){} } class Context{ private Policy policy; public void setPolicy(Policy policy){ this.policy = policy; } public void doSomething(){ policy.doSomething(); } } ``` ## 10、代理模式 ### 1、概念 > 同一个父类,关联target ### 2、UML类图 ![代理模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbNmhNJEIImkhkPIKD1MAClFJB5AoG_EpqqDoSZCIzVGvAhbuae6AO0fT5J8p2t8ISrDpIif9gmPJMywK1SE_RemZXNGZUcf9I0ZKVHfG3cQU5oAOe-U7Lm_bqDgNWhGtm00) ### 3、java示例代码 ```java interface MyClass{ public void doSomeThing(); } class MyClassA implements MyClass{ public void doSomeThing(){ } } class MyClassDecorator implements MyClass{ private MyClass target; public MyClassDecorator(MyClass target){ this.target = target; } public void doSomeThing(){ // 做一些事情 target.doSomeThing(); // 做另外一些事情 } } ``` ## 11、责任链模式 ### 1、概念 > 处理之后调用next继续处理 ### 2、UML类图 ![责任链模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbK8IYqkoCyhpapApCaigLIevb9Gq5OeJYtnIwqeqK2Lr0JBfUG7v-UcbcHavgLhQ7BLSYNd91ONAmGPAcJc5kIavgRcbHHZCrGNNJ0FQ06vbXdHqp9ZIYr3bIRAQYvWUEhP0JtA5MG4PXXpEQJcfG2Z3W00) ### 3、java示例代码 ```java interface Responsibility { public void setNext(Responsibility); public void doSomething(); } class R1 implements Responsibility { private Responsibility next; public void setNext(Responsibility responsibility){ this.next = resposibility; } public void doSomething(){ // doSomething this.next.doSomething(); } } class R2 implements Responsibility { private Responsibility next; public void setNext(Responsibility responsibility){ this.next = resposibility; } public void doSomething(){ // doSomething this.next.doSomething(); } } class R3 implements Responsibility { private Responsibility next; public void setNext(Responsibility responsibility){ this.next = resposibility; } public void doSomething(){ // doSomething this.next.doSomething(); } } ``` ## 12、模板方法模式 ### 1、概念 > 父类定义模板方法,子类重写某个子方法 ### 2、UML类图 ![模板方法模式类图](//www.plantuml.com/plantuml/png/SoWkIImgAStDuKfCAYufIamkKKZEIImkLd24Sft1l6ek1GLjXUAIr0933KqusmY9RGnbbwJc5kGabgG2kRLS4AESy_EIYr9BKi566Ifa0XMavgRcbU2n19Tk8s9q6-7IRKoatGXFWKroICrB0OOG0000) ### 3、java示例代码 ```java abstract class AbstractClass { public void step1(); public void step2(); public void step3(); public void template(){ this.step1(); this.step2(); this.step3(); } } class ConcreteClass1 implements AbstractClass { public void step1(){ System.out.println("xxx"); } } class ConcreteClass2 implements AbstractClass { public void step2(){ System.out.println("xxx"); } } class ConcreteClass3 implements AbstractClass { public void step1(){ System.out.println("xxx"); } public void step3(){ System.out.println("xxx"); } } ``` ## 13、享元模式 ### 1、概念 > 定义Map来减少对象的创建 ### 2、UML类图 ![享元模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuKhEIImkLd3BgGnFpKpFAAdcgkL25tDBJ2x9BwfKgEPIKD1Ly4Wipl1DB50eoC_F0GfeAwIdbi2LQWIN56NcfIjafrPgWap2C2DVLnTXC9T3QbuAq140) ### 3、java示例代码 ```java class FlyWeight{ } class FlyWeightFactory { private HashMap pool = new HashMap<>(); public FlyWeight getFlyWeight(String key){ // 代码 } } ``` ## 14、命令模式 ### 1、概念 > 关联命令,命令变化会导致行为变化 ### 2、UML类图 ![命令模式模式类图](https://www.plantuml.com/plantuml/png/VOun3i8m34Ltdy8Z2FKALQLEh722A34G4Jl8SRiWxev4v6vbieV_djxKBAWjN22BaTv299mhSv24Rq0yOQhNocIFBFV34JuGIsWDpxBM9-blCsn4xFSFDrU9IaPEP7uLOX9hBkd62yMyagBsks_qvKwjTmxZ5Wd-3AF3C96aXSiN) ### 3、java示例代码 ```java interface Command { public void doSomething(); } class Invoker { private Command command; public void doSomething(){ this.command.doSomething(); } } class ConcreteCommand implements Command{ private Reciver reciver; public void doSomething(){ this.reciver.doSomething(); } } class Reciver { public void doSomething(){} } ``` ## 15、生成器模式 ### 1、概念 > ProductBuilder来分步骤创建Product ### 2、UML类图 ![生成器模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuKhEIImkLWWeoayfJIvHgEQgHHLnAitCIKaj0aeeA6Wh59Ua5XXgQCBPHaXiOoWxFRK4gXSeKCk5PewU7SnaBeVKl1IW2m00) ### 3、java示例代码 ```java class Product { } class ProductBuilder { Product product = new Product(); public ProductBuilder step1(){ // xxx return this; } public ProductBuilder step2(){ // xxx return this; } public ProductBuilder step3(){ // xxx return this; } public ProductBuilder getProduct(){ return this.product; } } ``` ## 16、原型模式 ### 1、概念 > clone克隆 ### 2、UML类图 ![原型模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbK8ACeloI-fB4XLgEPIKD1My4_AIaqkiL98pidFIzNGvAhbIiv9B2vMYAYeKCZCBSX9pKtDAob6QCEboo4rBmLe4m00) ### 3、java示例代码 ```java interface Prototype { public Object clone(); } class Xxx implements Prototype{ public Object clone(){ return xxx; } } ``` ## 17、备忘录模式 ### 1、概念 > 生成快照,可以撤销 ### 2、UML类图 ![备忘录模式类图](https://www.plantuml.com/plantuml/png/JOz1oeCm48NtESKibHyzWFo8KEYgfOjwWQ4P9DGaa1cb8BrxYIRgAk5xBtml7Gi6cUoeNYComoEOmJWK7s1H07zm9qjEF33Ez1GKwdr2HRaMPcyq32HhU0tUvZY_J6UflicHWsKd5mpKuvisQGKtm_AVQcq3Thj5kYiRGArt1qTvUHxSn4s5SGB6QVf4--blTTtceZhalgeEt97Janr_) ### 3、java示例代码 ```java class Originator { public Memento saveStateToMemento(){} public void getStateFromMemento(Memento Memento){} } class Memento { } class CareTaker { private List: mementoList public void: add(Memento state){} public Memento get(int index){} } ``` ## 18、迭代器模式 ### 1、概念 > 返回Iterator来遍历容器 ### 2、UML类图 ![迭代器模式](//www.plantuml.com/plantuml/png/bOv12i8m44NtESKi5S43P245Lsxq3DFurKWoaMGAWdXtiQLfNKcNy-R_ns-ASjOk1kD5aI_iG0T5PatvPOWsrAOKm6BfnkM8fwxMFJwrTpYr90Dwp_hx9CfUC0Ygpj8LEXvznGKkvHjt6OhnHJu-0Y942rMsRCklkEwPcoVuR-MKtEvgp3IGSnV31m00) ### 3、java示例代码 ```java interface Iterator{ public boolean hasNext(); public Object next(); } interface Container{ public Iterator getIterator(); } class ConcreteIterator implements Iterator { public boolean hasNext(){} public Object next(){} } class ConcreteContainer implements Container { public Iterator getIterator(){} } ``` ## 19、组合模式 ### 1、概念 > 用来模拟树状结构 ### 2、UML类图 ![组合模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuShCAqajIajCJbLmpiyjoCzBpIlXuahEIImkLl19JKnJIAqeISrBAKR8LdFLWkMXGiMP9QcOYXIgkHGKT1LyCejBRE22TbOAoHcPEIb5gNb0Cn2wy_Nqx91iTm0Q1NGP0000) ### 3、java示例代码 ```java interface Component{} class Leaf extends Component{ } class Composite extends Component { private List children = new ArrayList<>(); } ``` ## 20、桥接模式 ### 1、概念 > 通过关联来减少继承的爆炸 ### 2、UML类图 ![组合模式类图](ROyn2W9134Nxd28Ns0jOo8gLhJSOP_z2O2OZIGH1lBjRYAROClptUVcpHx5uz4QY0LjB1Pzk7bPgo52ghRZp5QiebXGmdW5TFCClOfxuqkyD7Hh33Yp_WzwK78dwEiv3go6GafyaqxJpp7JSgzEybRTf7m00) ### 3、java示例代码 ```java interface Abstraction{} class RefinedAbstraction extends Abstraction{ private Implementor implementor; public RefinedAbstraction(Implementor implementor){ this.implementor = implementor; } } interface Implementor class ConcreteImplementor extends Implementor{} ``` ## 21、中介者模式 ### 1、概念 > 网状的类关系,改为星状关系 ### 2、UML类图 ![组合模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuKhEIImkLd3Epot8pqlDAt6ivb9Gq5M8oiZFI_VAJBLIg8Aok6hHbJeHhzGPZrA8MhWSH2N2FLOAYQWYJbOAIQWYpbOAoK23O2OewEhQ8Hc0Gzm9XxWp5q8hM0Qc327kX4FS6LNS8JKl1HZ20000) ### 3、java示例代码 ```java class ComponentA{ private ZhongJie = zhongJie; } class ComponentB{ private ZhongJie = zhongJie; } class ComponentC{ private ZhongJie = zhongJie; } class ZhongJie{ private ComponentA = a; private ComponentB = b; private ComponentC = c; } ``` ## 22、访问者模式 ### 1、概念 > 针对同一个结构化信息,不同的访问者看到的内容是不一样的 ### 2、UML类图 ![访问者模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuKhEIImkLWZEpqrr1hEgkHGKj1NACeipIpJ2G6H-aIPNBLTcNabgKLfYSge2L12YBYS_Fri3hXce468UJ96XGcPkGKvgRcfUIJ596er8q8XmkvwU7Kmn5vG6Yy5LS3cavgK0VGq0) ### 3、java示例代码 ```java class SomeClass { public void visit(Visitor visitor){ visitor.look(this); } } interface Visitor{ public void look(SomeClass target); } class Visitor1 implements Visitor{ public void look(SomeClass target){ // 观察信息1 } } class Visitor2 implements Visitor{ public void look(SomeClass target){ // 观察信息2 } } ``` ## 23、解释器模式 ### 1、概念 > 对一段文本进行解释 ### 2、UML类图 ![解释器模式类图](https://www.plantuml.com/plantuml/png/SoWkIImgAStDuKfCAYufIamkKKZEIImkLd2jA2XABIxEpC-hvb9Gq5R8p2j9BG8AbQHgQ7BLSd51L8Ma5kLcvYNc85Ghf5QKfEQb4380gjylFuzI8vppWQ8L9GhLG147e3QWNm00) ### 3、java示例代码 ```java abstract class Expression{ public void interprete(){} } class TerminalExpression extends Expression{ public void interprete(){} } class NonTerminalExpression extends Expression{ public void interprete(){} } class Context { } ```