Java的12种设计模式

1.简单工厂

这里写图片描述
1.1简单工厂功能类编辑步骤

1>定制抽象产品接口,如ICar。
2>定制具体产品子类,如TopCar,MidCar,LowCar。
3>定制工厂类,如CarSimpleFactory。

1.2简单工厂类的特点

它是一个具体的类,非接口或抽象类。其中一个重要的create()方法,利用if…else或switch开关创建所需产品,并返回。

1.3工厂类静态create()方法的理解

使用简单工厂的时候,通常不用创建简单工厂类的类实例。可以把简单工厂类实现成一个工具类,直接使用静态方法就可以了。也就是说,简单工厂的方法通常是静态的,所以也被称为静态工厂。可以将该方法私有化。

2.工厂

这里写图片描述
2.1工厂模式功能类编制步骤

1>定制抽象产品接口,如ICar。
2>定制具体产品子类,如类TopCar,MidCar,LowCar。
3>定制抽象工厂类(或接口),如AbstractFactory。其中有一个重要的create()抽象方法。
4>定制具体工厂子类,如UpFactory,MidFactory,DnFactory。

2.2工厂模式与简单工厂模式的区别

1>工厂模式把简单工厂中具体的工厂类(CarSimpleFactory)划分为:抽象工厂层+具体工厂子类型。
2>工厂方法更易于软件的二次开发及维护,其主要特征是:当需求分析发生变化时,只需要增加,删除相应的类,而不是修改已有的类。

3.抽象工厂

3.1抽象工厂模式功能类编制步骤

1>定制抽象产品接口,如ICar,IBus。
2>定制具体产品子类,如类TopCar,MidCar,LowCar,公共汽车类UpBus,MidBus,BnBus。
3>定制抽象工厂类(或接口),如AbstractFactory。其中有两个重要的create()抽象方法,分别返回ICar,IBus对象。
4>定制具体工厂子类,如UpFactory,MidFactory,DnFactory,每个工厂类中重写create()方法。

3.2与工厂模式的区别

从本质上说,抽象工厂与工厂模式是统一的,只不过抽象工厂是多产品系,工厂模式是单产品系的。

4.生成器模式(建造者模式)

这里写图片描述
生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
生成器思路是产品类与创建产品的类相分离。产品类仅1个,创建产品的类有n个。

4.1生成器模式编辑步骤

1>定义一个产品类。
2>定义n个生成器Build类。
3>定义一个统一调度者,也叫指挥者(Director)类,是对生成器接口IBuild的封装。

4.2生成器设计模式涉及4个关键角色:

产品(Product),抽象生成器(IBuild),具体生成器(Builder),指挥者(Director)。

5.观察者模式

这里写图片描述
场景:在生活实际中,经常会遇到多种对象关注一个对象数据变化的情况。例如,生活中有温度记录仪,当温度发生变化时,需要完成如下功能:记录温度日志,显示温度变化曲线,当温度越界时扬声器发出声音。
观察者设计模式适合解决多种对象跟踪一个对象数据变化的程序结构问题,有一个称作“主题”的对象和若干个称作“观察者”的对象。

5.1观察者设计模式涉及两种角色

主题和观察者

5.2观察者设计模式的一些重要结论

1>主题要知道对那些观察者进行监测,因此主题类中一定有集合类成员变量,包含了观察者的对象集合。
2>既然包含了观察者的对象集合,那么,观察者一定是多态的,有共同的父类接口。
3>主题完成的主要功能是:可以添加观察者,可以撤销观察者,可以向观察者发消息。

5.3观察者设计模式要完成的功能类编制

1>编制ISubject接口定义。
2>主题类编制。
3>观察者接口IObserver定义。
4>观察者类实现。

6.桥接模式

这里写图片描述
解决该问题的一个重要策略仍是利用语义,进一步抽象功能。

6.1步骤

1>定义邮寄接口IPost。
2>两个具体邮寄类SimplePost,MarkPost。
3>抽象事物类AbstractThing。该类是桥接模式的核心。分析语义“信件和包裹共享平邮与挂号功能”:信件,包裹是两个不同的事物,它们有共享的功能,也一定有相异的功能。共享的功能一定能封装到一个类中。
4>具体事物类Letter,Parcel。

6.2过程总结如下

先在右侧的功能类中选择一个具体的发送功能,再选择一个事务类,最后完成真正的发送过程。

7.代理模式

这里写图片描述
定义:给某一个对象提供一个代理,并由代理对象控制源对象的引用。
它是一种对象结构型模式。

7.1代理模式包括如下角色

ISubject:抽象主题角色,是一个接口。该接口是对象和它的代理共用的接口。
RealSubject:真实主题角色,是实现抽象主题接口的类。
Proxy:代理角色,内部含有对真实角色RealSubject的引用,从而可以操作真实对象。代理对象提供与真实对象相同的接口,以便在任何时刻都能替代真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

7.2最突出的特点

代理角色与实际主题角色有相同的父类接口。

8.状态模式

这里写图片描述
定义:事物有n个状态,且维护状态变化。

8.1重要结论

1>状态类中共有的父接口(或抽象类),n个不同的状态实现类。
2>事务类中包含状态类父接口成员变量声明,用以反映语义“事物有n个状态”。
3>事务类中有一定方法选择分支,判断事务类当前处于何种状态。

8.2状态模式必须完成以下内容的编制

1>Sate:状态接口,封装特定状态所对应的行为。
2>ConcreteState:具体实现状态处理的类。
3>Context:事务类,也称上下文类,通常用来定义多态状态接口,同时维护一个用来具体处理当前状态的示例对象。

9.访问者模式

这里写图片描述
访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的模式动机。

9.1步骤

1>定义抽象需求分析接口IShape。
2>定义具体功能实现类Triangle。
3>定义访问者接口IVisitor。
4>定义重心坐标实现类CenterVisitor。

9.2访问者模式主要涉及以下四种角色

1>IElement:抽象的事物元素功能接口,定义了固定功能方法及可变功能方法接口。
2>Element:具体功能的实现类。
3>IVisitor:访问者接口,为所有访问者对象声明一个visit方法,用来代表为对象结构添加的功能,原则上可以代表任意的功能。
4>Visitor:具体访问者实现类,实现要真正被添加到对象结构中的功能。

10.命令模式

这里写图片描述
顾名思义,命令模式一定是有命令发送者,命令接收者。命令发送者负责发送命令,命令接收者负责接收命令并完成具体的工作。

10.1步骤

1>抽象命令接口ICommand。
2>命令接收者Student。
3>命令发送者Teacher。
4>命令请求类Invoke。

Ps:在命令模式中,请求者是命令的管理类。有了Invoke,可以使层次结构更清晰,方便发送者,接收者之间的命令管理与维护。

10.2命令模式中的四种角色

1>ICommander:抽象命令者,是一个接口,规定了用来封装请求的若干个方法。
2>ConcreteCommander:具体命令发送者,即命令源。它是实现命令接口的类的示例,如上文中的Teacher。
3>Invoker:请求者,具体命令的管理与维护类。请求者是一个包含“命令接口”变量类的示例。请求者中的“命令”接口的变量可以存放任何具体命令的引用,请求者负责调用具体命令,让具体命令执行那些封装了请求的方法。
4>Receiver:命令接收者,是一个类的示例。该示例负责执行与请求相关的操作,如上文中的Student类。

11.装饰器模式

这里写图片描述
情形:假设现在需求分析提出了新需求,新接收到的信息可转化成大写字母或转化为XML文档,然后屏幕显示或日志保存。
装饰器模式利用包含代替继承,动态地给一个对象添加一些额外的功能。

11.1步骤

1>抽象装饰器基类Decorator
2>具体装饰类
log()方法先对字符串进行大写“装饰”,再执行已有的日志功能。

11.2装饰器模式

1>抽象构件角色(Component):它是一个接口,封装了将要实现的方法,如ILogger。
2>具体构件角色(ConcreteComponent):它是多个类,该类实现了Component接口,如FileLogger,ConsoleLogger。
3>装饰角色(Decorator):它是一个抽象类,该类实现了Component接口,同时也必须持有接口Component的对象的引用,如示例中的Decorator。
4>具体的装饰角色(Decorator类的子类,可以有一个,也可以有多个):这些类继承了类Decorator,实现了Component接口,描述了具体的装饰过程,如UpLogger,XMLLogger。

12.组合模式

这里写图片描述
12.1组合模式的三种角色

1>抽象节点:Node,是一个抽象类(或接口),定义了个体对象和组合对象需要实现的关于操作其子节点的方法,如add(),remove(),display()等。
2>叶节点:Leaf,从抽象节点Node派生,由于本身无后继节点,其add()等方法利用Note抽象类中响应的默认实现即可,只需实现与自身有关的remove(),display()等方法即可。
3>组合节点:Component,从抽象节点Node派生,包含其他Composite节点或Leaf节点的引用。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1) 优秀的程序应该是这样的:阅读时,感觉很优雅;新增功能时,感觉很轻松;运行时,感觉很快速,这就需要设计模式支撑。2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各设计模式,但是不知道怎么使用到真实项目。本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23设计模式及其分类,比如 单例模式的8实现方式、工厂模式的3实现方式、适配器模式的3实现、代理模式的3方式、深拷贝等3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧课程内容和目标本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23设计模式包括:创建型模式:单例模式(8实现)、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式(3实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)2) 学习目标:通过学习,学员能掌握主流设计模式,规范编程风格,提高优化程序结构和效率的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值