![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
无名同学
不到南山终不休
展开
-
观察者模式案例
观察者模式定义:观察者模式定义了一系列对象之间的一对多关系,当一个对象状态改变,其他依赖者都会收到通知。气象站要想多个公告版发送信息,实现每当气象站数据改变时公告板就能自动去更新自己的数据。主题接口,用来添加公告板或者删除公告吧,信息变化public interface Subject { //这两个方法都需要一个观察者作为变量,该观察者是用来注册或被删除的原创 2017-03-28 12:47:58 · 340 阅读 · 0 评论 -
一个故事看懂责任链模式
小员工要求老板发聚餐费,各个等级的老板能够批准的额度是不一样的,上级批不了给上上级,上上级批不了给上上上级,一直往上直到最终大boss。public abstract class Handler { protected Handler successor; public abstract void handleRequest(int money); public原创 2017-09-13 20:31:21 · 297 阅读 · 0 评论 -
迭代器模式
定义迭代器模式迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。实例:三个餐厅要合并,每个餐厅的菜单采用不同和数据结构实现,服务员需要获取所有的菜单信息,但是处理逻辑又不能过于复杂。/** * 菜单项 */public class MenuItem { String name; String description;原创 2017-05-08 13:30:57 · 192 阅读 · 0 评论 -
利用Java提供的观察者
/** * 观察者类的具体实现 */public class ConcreteObserver implements Observer{ //名称的变量 private String observerName; public String getObserverName() { return observerName; } publ原创 2017-05-07 22:14:37 · 200 阅读 · 0 评论 -
观察者模式
观察者模式的定义定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。推模型目标对象主动向观察者推送目标的详细信息,推送的信息通常是目标对象的全部或部分数据。两种模型做个比较推模型是假定目标对象知道观察者需要的数据拉模型是目标对象不知道观察者具体需要什么数据,因此把自身传给观察者,由观察者取值。拉模型案例,原创 2017-05-07 21:52:14 · 204 阅读 · 0 评论 -
代理模式
组成:抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。实例:记录日志和汽车行驶的时间/** * 汽车运动接口 */public interface Moveable { void m原创 2017-05-07 19:46:43 · 229 阅读 · 0 评论 -
模板方法模式
1. 概述 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。2. 模式中的角色 2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。 2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。3.模板方法模式的实现要素 准备一个抽原创 2017-05-07 18:50:06 · 175 阅读 · 0 评论 -
适配器模式
适配器模式定义:适配器模式将一个类的接口,转化成客户期望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。适配器分类1组合采用组合方式的适配器称为对象适配器特点:把“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装被支配者。2继承采用继承方式的称为类适配器特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适原创 2017-05-07 16:32:31 · 277 阅读 · 0 评论 -
单例模式案例
public class Singleton { //volatile确保,当uniqueInstance变量被初始化成singleton实例时, //多个线程正确地处理uniqueInstance变量。 private volatile static Singleton uniqueInstance; private Singleton(){原创 2017-04-22 12:07:38 · 227 阅读 · 0 评论 -
如何在Java中使用双重检查锁实现单例
单例类在Java开发者中非常常用,但是它给初级开发者们造成了很多挑战。他们所面对的其中一个关键挑战是,怎样确保单例类的行为是单例?也就是说,无论任何原因,如何防止单例类有多个实例。在整个应用生命周期中,要保证只有一个单例类的实例被创建,双重检查锁(Double checked locking of Singleton)是一种实现方法。顾名思义,在双重检查锁中,代码会检查两次单例类是否有已存在的实例转载 2017-04-22 10:30:40 · 267 阅读 · 0 评论 -
命令模式
命令模式将“请求”封装成对象,以便使用不同的请求,队列 或者日志来参数化其他对象。命令模式也支持课撤销的操作。示例:public class Light { private String name="null"; public Light(){ } public Light(String name){ this.name=name;原创 2017-04-30 19:28:23 · 182 阅读 · 0 评论 -
工厂模式案例
import java.util.ArrayList;/* * 抽象披萨类,所有的具体 披萨类都必须派生自这个类 */public abstract class Pizza { String name; String dough; String sauce; ArrayList toppings=new ArrayList void原创 2017-04-03 08:55:21 · 298 阅读 · 0 评论 -
装饰者模式-装饰java.io类
Java.io包内的类就有装饰者模式inputStream这是我们的抽象组件FileInputStream StringBufferInputStream ByteArrayInputStream是可以可以被装饰者包装的具体组件FilterInputStream是一个抽象类装饰类PushbackInputStream BufferdInputSteam DataInputStrea原创 2017-04-02 10:09:33 · 349 阅读 · 0 评论 -
装饰者模式案例
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。拿一个咖啡对象,以摩卡对象来装饰它,以奶泡对象来装饰它,调用cost方法,并依靠委托将调料的价格加进去public abstract class Beverage { //原味类 //默认包访问权限 String description="Un原创 2017-03-29 18:54:42 · 303 阅读 · 0 评论 -
观察者模式案例用Java内置对象实现
具体思路参考上一篇博客import java.util.Observable;//继承observable,查看源码可以发现,observable已经把注册,添加,删除都做好了,//我们不在需要做public class WeatherData extends Observable{ private float temperature; private floa原创 2017-03-28 21:57:36 · 178 阅读 · 0 评论 -
Java8之工厂模式
interface Number {}class One implements Number {}class Two implements Number {}class Three implements Number {}class NumberFactory { final static Map, Supplier> map = new HashMap;原创 2017-09-13 21:02:00 · 324 阅读 · 0 评论