![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
设计模式
skinX
这个作者很懒,什么都没留下…
展开
-
command模式
命令模式:将命令本身与命令的调用分离。command:命令接口,定义执行命令的方法executeconcreteCommand:具体的命令,持有实际命令执行的引用receiverReceiver:命令的实际执行者,例如遥控器可以操控电视,增加音量,减小音量,换台等。interface Command{ void execute();}class AddVolCommand interface Command{ YaoKongQi ykq; //命令的具体执行,是调用遥控器类中的addV原创 2021-03-10 23:04:45 · 59 阅读 · 0 评论 -
proxy模式
代理模式:不直接通过原有类调用,而是添加代理类进行调用。可以对外屏蔽原有类,其中原有类是不感知代理类的,并不知道是谁调用的,而代理类是感知原有类的,因为持有原有类的引用。例如我想买火车票,但是亲自去买,我嫌麻烦,就希望有人替我买。我不关心代理人手中的票是怎么来的,我只希望能从代理人那获得火车票。//定义买票接口interface Ticket{ void buy();}class People implements Ticket{ buy(){ //买票 }}class Proxy原创 2021-03-10 21:51:24 · 53 阅读 · 0 评论 -
flyweight模式
享元模式:通过共享对象,节省内存。例如可以创建对象缓存池,已经存在的对象无需创建,只需从缓存池中取出返回public Pool{ Map<String,Object>map=new HashMap(); Object createObject(String s){ //缓存中已有对象,无需创建 if(map.get(s)!=null) return s; else{ //创建对象,放入map Object o=new Object(); map.put(s原创 2021-03-08 22:44:31 · 89 阅读 · 0 评论 -
state模式
状态模式:用类来表示状态。例如客服电话,只有白天的时候才有人工服务,晚上就只有自助服务。如果没有状态类,通常代码实现是这样的:class Service{ public void server(){ if(白天){ 人工服务 } if(晚上){ 自助服务 } }}如果将白天、晚上用对象来表示,那么代码会是这样的//状态接口,定义服务方法interface State{ void server();}//白天类class Day implements S原创 2021-03-03 23:14:11 · 116 阅读 · 1 评论 -
memento模式
备忘录模式:通过保存状态对象,记录状态信息,将状态进行回退。例如单机游戏可以存档,可以回到某个存档点。class Player{ //玩家当前的武器 private String weapon; //玩家当前拥有的金钱 private String money; //创建存档 public State create(); //回复存档 public void restore(State state);}//存档状态class State{ private String weapo原创 2021-03-03 22:40:56 · 79 阅读 · 1 评论 -
观察者模式
观察者模式:被观察者在发生变化后,会通知观察者。例如你在微博上关注了一个明星,当明星发了一条新微博后,你就会收到通知。其中你是观察者,明星就是被观察者。//观察者接口interface Observer { void notify();}//被观察者类public class Observerd{ //观察者集合 List<Observer> observer; //添加观察者 public void add(Observer observer){ observer.原创 2021-03-02 21:22:21 · 48 阅读 · 0 评论 -
mediator模式
中介者模式:将类与类之间的调用关系,通过一个中间类来解耦。所有的类调用,都会通过中间类进行转发。例如有三个类,三个类需要相互通信,如果没有中介者,每个类里都要包含与其他类发送消息的方法。有了中介者后,发送消息的方法就可以只定义在中介者中,其他类只需要调用中介者的方法就可以了。class Mediator{ void sendA(Message msg){}; void sendB(Message msg){}; void sendC(Message msg){};}class A {//类里原创 2021-02-28 22:27:40 · 145 阅读 · 0 评论 -
facade模式
facade模式:将内部复杂的类关系,整合成一个统一对外的接口,就像银行柜台一样,有柜员给你提供服务,你不用了解内部是怎么流转的。Client:调用者类Facade:对外暴露的接口ClassA:提供具体服务的内部类AClassB:提供具体服务的内部类BClassC:提供具体服务的内部类CClassD:提供具体服务的内部类D...原创 2021-02-28 22:06:00 · 228 阅读 · 0 评论 -
责任链模式
责任链模式:定义多个处理类,组成处理链,每个类都是链路上的一个元素,对数据进行处理,如果当前元素处理不了,可以转交给下一个元素处理。例如给某个人转账,在手机上转账失败了,去自助机上转账,自助机上转账失败了,再去柜台转账。//转账抽象类public abstract class Transfer{ //持有下一个转账类对象,本类处理失败,就会发到下一个类上处理 private Transfer next; boolean trans(){ //如果当前类转账失败,就交给下一个类处理 if(!原创 2021-02-28 15:58:54 · 51 阅读 · 0 评论 -
visitor模式
访问者模式:数据结构与数据的访问分离,通过定义访问者类,对数据进行访问操作visitor:访问者接口,ListVisitor:具体的访问者,Element:定义接受访问者的接口acceptEntry:定义具体元素的接口File:具体的元素fileDirectory:具体的元素directory//访问者接口public abstract class Visitor{ public abstract void visitor(File file); public abstract voi原创 2021-02-28 15:39:34 · 114 阅读 · 0 评论 -
decorator模式
装饰模式:给对象添加装饰、添加功能。例如有一块蛋糕,添上草莓就是草莓蛋糕,添上巧克力就是巧克力蛋糕,本质都是蛋糕,就是装饰物不同。//定义蛋糕接口,interface Cake{ void print();}//具体的蛋糕,class ConcreteCake implements Cake{ void print(){ system.out.print("这是一个蛋糕") }}//抽象装饰类,继承蛋糕接口,与蛋糕类具有一致性abstract class Decorator im原创 2021-02-28 15:04:06 · 67 阅读 · 0 评论 -
composite模式
composite模式:容器本身与内部元素具有一致性,例如文件与文件夹的关系。Entry:文件和文件夹的抽象,使得file和directory具有一致性File:文件Directory:文件夹,可以存放文件原创 2021-02-27 12:11:26 · 159 阅读 · 0 评论 -
strategy模式
策略模式:针对同一功能,有不同的实现,可以对功能方法的实现进行替换。//排序功能定义interface Sort { //对arr数组进行排序 void sort(int []arr);}//冒泡排序class BubbleSort{ void sort(int[]arr){};}//归并排序class MergeSort{ void sort(int[]arr){};}...原创 2021-02-27 11:35:21 · 66 阅读 · 0 评论 -
bridge 模式
桥接模式:将类的功能实现与类的层次关系分离类的功能层次:如果需要新增功能,通常会继承原有的类,新写一个类,并添加新功能的实现,从而形成了类的功能层次关系。类的实现层次:如果要给类添加新的实现,比如说给水果类添加新的类,苹果,需要继承原来的水果类,新写一个苹果类,这样就形成了类之间的实现层次关系。例如显示器类,类的实现层次上,有各种各样的品牌显示器,类的功能实现上,显示器可以打开,关闭,调节等//定义显示器类class Monitor{ //持有功能层次接口的引用 MonitorFun impl原创 2021-02-27 11:11:57 · 80 阅读 · 0 评论 -
abstract factory 模式
抽象工厂模式:工厂将零件组合成一个产品例如组装一台电脑主机,需要cpu,主板、内存等零部件//零件类的抽象接口public abstract class Item{}//cpu零部件public abstract class CPU extends Item{}//主板零部件public abstract class Board extends Item{}//内存条零部件public abstract class Memory extends Item{}//零件工厂publ原创 2021-02-27 10:37:20 · 71 阅读 · 0 评论 -
builder模式
builder模式:对于复杂的对象创建,可以将创建过程封装为对象。abstractbuilder:抽象类,定义创建对象各个部分的方法concretebuilder:抽象类的具体实现,实现创建对象各个部分的细节例如盖房子,需要砌墙,装防盗门,装玻璃等,属于盖房子的一部分。class House(){ private String wall; private String door; private String glass; public void setWall(String wall){原创 2021-02-25 21:53:41 · 128 阅读 · 0 评论 -
prototype模式
原型模式:根据已有对象,来创建新的对象。client:用于注册、获取对象prototype:原型对象接口concreteprototype:具体的对象实现//原型对象接口interface Prototype{ //定义生成对象的方法 void clone()}//某一具体的原型对象class A implements Prototype { public void clone (){ //具体是怎么根据已有对象,来生成新对象的 }}class Client { //存储原创 2021-02-25 21:28:24 · 119 阅读 · 0 评论 -
singleton模式
单例模式:只生成一个实例单例模式的实现方式有多种1. class Singleton{ private static Singleton singleton=new Singleton(); //构造函数置为private,避免new的方式生成 private Singleton(){} //提供访问方法 public static getSingleton(){ return singleton; }}2.class Singleton{ //voliate 避免线程间看到的原创 2021-02-24 22:22:54 · 55 阅读 · 0 评论 -
工厂模式
工厂模式:产品由工厂生成,具体的产品由具体的工厂生成Factory中定义生成产品的方法,Product是产品接口。IDCardFactory是Factory的某一个具体实现,用来生成具体产品IDCard原创 2021-02-24 22:03:28 · 71 阅读 · 0 评论 -
模板模式
模板模式:接口中定义流程,具体的执行细节由子类实现。比如说把大象装进冰箱里,第一步打开冰箱,第二步放入大象,第三步关上冰箱。接口中定义这样的步骤,至于具体是怎么实现的,交给子类去实现。//定义步骤interface Template{ void open(); void put(); void close();}//实现步骤class A implement Template{ public void open(){ //打开冰箱,具体怎么打开,需要自己实现 } public原创 2021-02-24 21:48:25 · 50 阅读 · 0 评论 -
adapter模式
适配器模式:将原有的接口进行转换,达到复用的目的比如说我手头上有220v的充电器,但是当地只有110v的电压,无法直接使用。现在就需要一个中间的转换器,完成电压的转换(实际完成工作的,还是那个220v的充电器)。适配器模式有两种实现:1.继承 2.委托继承方式实现://220v的充电器class Charger1 { //220v充电方法 void chargeWith220V();}//110v的充电器interface Charger2 { //110v充电方法 void原创 2021-02-23 22:46:13 · 95 阅读 · 0 评论 -
iterator模式
迭代器模式,将数据的遍历与数据分离,遍历数据集合与数据集合的实现不再关联。Aggregate:集合接口ConcreteAggregate:具体的集合实现Iterator:迭代器接口ConcreteIterator:具体的迭代器实现集合接口Aggregate内部会包含一个迭代器接口Iterator,迭代器接口中定义了hasNext、next 方法。hasNext方法用于判断元素是否遍历完成,nex方法t用于返回当前游标指向的元素,并将游标后移。遍历元素时,调用Iterator接口中的方法,与集原创 2021-02-23 22:07:29 · 76 阅读 · 0 评论