资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
设计模式笔记1、 单例模式定义:确保一个类只有一个实例,并提供一个全局访问点。类图:Singletonstatic instancestatic getInstance()getInstance()方 法 是 静 态 的 , 这 意味 着 它 是 一 个 类 方 法 , 所 以 可 以在 代 码 的 任 何 地 方 使 用Singleton.getInstance()访 问 它 。 这和 访 问 全 局 变 量 一 样 简 单 , 只 是多 了 一 个 优 点 : 单 利 可 以 延 迟 实例 化这 个 instance类 变量 持 有 唯 一 的 单 利实 例源代码:2、 工厂模式定义:工厂模式定义了一个创建对象的接口,由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。public class Singleton private static Singleton instance = null;private Singleton()public static Singleton getInstance() if(instance = null)synchronized (Singleton.class) instance = new Singleton();return instance;(1).简单工厂模式类图:SimpleFactorycreateProductProductmethod1()method2()Product_Amethod1()method2()Product_Bmethod1()method2()将 Product定 义 为 抽象 类 , 具 有 一 些 有用 的 实 现 , 这 些 实现 可 以 被 覆 盖这 是 我 们 的 “具 体 产 品 ”, 每个 产 品 必 须 继 承 自 Product类 并设 计 成 一 个 具 体 类 。 这 样 就 可以 被 工 厂 创 建 , 并 返 回 给 客 户这 是 创 建 具 体 产 品 的工 厂 , 它 应 该 是 我 们的 应 用 中 唯 一 用 到 具体 产 品 类 的 地 方源代码:public abstract class Product public void method1() public void method2() public class Product_A extends Productpublic Product_A() public void method1() System.out.println(this is method1 in Product_A);public void method2() System.out.println(this is method2 in Product_A);public class Product_B extends Productpublic Product_B() public void method1() System.out.println(this is method1 in Product_B);public void method2() System.out.println(this is method2 in Product_B);(2).抽象工厂模式类图:Product_Amethod1()method2()Product_Bmethod1()method2() Factorymethod1()method2()AbstractFactorygetProduct()Product_A_FactorygetProduct()Product_B_FactorygetProduct()所 有 的 产 品 必 须 实 现 这 个 共 同 的 接口 , 这 样 使 用 这 些 产 品 的 类 就 可 以引 用 这 个 接 口 , 而 不 是 具 体 类这 些 类 负 责 创 建 一 个 或 多个 具 体 产 品 , 只 有 它 们 知道 如 何 创 建 这 些 产 品源代码:public class SimpleFactory public Product createProduct(String type) Product product = null;if(type.equals(Product_A)product = new Product_A();else if (type.equals(Product_B) product = new Product_B();return product;public interface Product public void method1();public void method2();public class Product_A implements Product Overridepublic void method1() System.out.println(this is method1 in Product_A);Overridepublic void method2() System.out.println(this is method2 in Product_A);3、 策略模式定义:策略模式定义了算法族,分别将其封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。类图:ProcessorObject processor(Object obj)ConcreteProcessorObject processor(Object obj)Strategyprocess(Processor pro,Object obj)Processor为 抽 象 类ConcreteProcessor为 具体 的 实 现 类 , 用 于 实现 具 体 处 理 的 方 法Strategy类 调 用Processor类 实 现 多 态public class Product_B implements Product Overridepublic void method1() System.out.println(this is method1 in Product_B);Overridepublic void method2() System.out.println(this is method2 in Product_B);public interface AbstractFactory public Product getProduct();public class Product_A_Factoty implements AbstractFactory Overridepublic Product getProduct() return new Product_A();public class Product_B_Factory implements AbstractFactory Overridepublic Product getProduct() return new Product_B();源代码:4、 观察者模式定义:观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。类图:public abstract class Processor public Object process(Object obj)return obj; /* ConcreteProcessor* */public class Upcase extends Processorpublic String process(Object obj)return (String)obj).toUpperCase(); /* ConcreteProcessor* */public class Downcase extends Processorpublic String process(Object obj)return (String)obj).toLowerCase(); public class Strategy public void process(Processor p,Object obj) System.out.println(p.process(obj); SubjectregisterObserver()removeObserver()notifyObserver() Observerupdate()ConcreteSubjectregisterObserver()removeObserver()notifyObserver()getState()setState()ConcreteObserverupdate()/其 它 观 察 者 的 具 体 方 法许 多 观 察 者主 题这 是 主 题 接 口 , 对象 使 用 此 接 口 注 册为 观 察 者 , 或 把 自己 从 观 察 者 中 删 除一 个 具 体 主 题 总 是实 现 主 题 接 口 , 除了 注 册 和 撤 销 方 法之 外 , 具 体 主 题 还实 现 了notifyObserver()方法 , 此 方 法 用 于 在状 态 改 变 时 更 新 所有 当 前 观 察 者具 体 主 题 也 可能 设 置 和 获 取状 态 的 方 法每 个 主 题 可 以有 许 多 观 察 者所 有 潜 在 的 观 察 者 必 须 实现 观 察 者 接 口 , 这 个 接 口只 有 update()一 个 方 法 ,当 主 题 改 变 时 它 被 调 用具 体 的 观 察 者 可 以 是 实 现 此 接口 的 任 意 类 。 观 察 者 必 须 注 册具 体 主 题 , 以 便 接 收 更 新源代码:public interface Subject public void registerObserver(Observer o);public void removeObserver(Observer o);public void notifyObserver(); /当主题状态改变时,该方法会被调用,以通知所有的观察者public class ConcreteSubject implements Subject private List observers;private String parameter;public ConcreteSubject() this.observers = new ArrayList();Overridepublic void registerObserver(Observer o) this.observers.add(o);Overridepublic void removeObserver(Observer o) this.observers.remove(o);Overridepublic void notifyObserver() int i,n;n = this.observers.size();for(i = 0;i Commandexecute()undo()Client类 负 责 创建 一 个ConcreteCommand, 并 设 置 其接 收 者调 用 者 持 有 一 个 命 令对 象 , 并 在 某 个 时 间点 调 用 命 令 对 象 的execute()方 法 , 将 请求 付 诸 实 行Command为 所 有 命 令 声 明 了 一 个 接 口 。 调 用 命 令 对 象的 execute()方 法 , 就 可 以
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号