![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 86
iteye_9280
这个作者很懒,什么都没留下…
展开
-
设计模式:装饰模式
JAVA 的IO模块如果不使用装饰模式,会需要更多的IO类,如带缓冲的并能读取基本类型的类、读取字节数组的缓冲类等等。 package com.test.decrator; //抽象构件角色 public interface Component { public void dosometing(); } package com.tes...原创 2011-08-04 00:31:31 · 77 阅读 · 0 评论 -
适配器与外观(Facade)模式(Head First版)
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 例如在香港的水货手机充电器插头无法适应大陆的插座,需要一个第三方转换器。这个转换器也就是适配器。 在介绍策略模式时,有写过一个鸭子接口 package com.headfirst.chapter7; public interface Duck { public void q...原创 2012-06-02 17:45:25 · 147 阅读 · 0 评论 -
命令模式(Head First版)
用命令模式实现这样一个需求: 有个按钮,将一盏电灯的开和关动作都绑定在这个按钮上。另外还有一个undo按钮,可撤消之前的一个动作。 package com.headfirst.chapter6; public interface Command { public void execute(); public void undo(); } ...原创 2012-05-31 01:01:09 · 78 阅读 · 0 评论 -
设计模式:装饰模式(Head First版)
装饰者模式:动态地将责任附加到对象上,若到扩展功能,装饰者提供了比继承更有弹性的替代方案。 UML图 有这样一个需求,咖啡店出售各式咖啡,如深焙、低卡、摩卡等,也有各种调料,如牛奶、奶泡等。 咖啡店需要根据咖啡中所放入的不同调料收取不同的费用。用装饰者模式来实现 定义一个抽象组件 package com.headfirst.chapter3; /** *...原创 2012-05-28 23:50:26 · 73 阅读 · 0 评论 -
观察者模式(Head First版)
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 有这样一个需求: 一个气象站,它会提供气温,气压,湿度等气象数据,要实现一个显示当前气象状态的显示装置。 能显示当前气温、气压、湿度等。当气象站的数据一发生改变,就能通知显示装置。 使用观察者模式实现。 先看看观察者模式类图: 主题是一个接口,定义了注册观察者、...原创 2012-05-27 00:43:41 · 84 阅读 · 0 评论 -
单例模式(Head First版)
单例模式:确保一个类只有一个实例,并提供一个全局访问点。 代码实现: package com.headfirst.chapter5; public class Singleton { private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){...原创 2012-05-23 20:29:56 · 82 阅读 · 0 评论 -
工厂模式:抽象工厂
接着上一篇说过的工厂方法,这节来谈一谈抽象工厂: 首先来看一个设计原则 依赖倒置原则:要依赖抽象,不要依赖具体类。不能让高层组件依赖低层组件,而且,不管高层或低层组件,“两者”都应该依赖于抽象。 再回到比萨店: 使用工厂方法后,各地的比萨加盟店生意火爆,但也有些加盟店使用劣质原料,导致信誉下降。 现在我们要创建一个工厂来生产原料,这个工厂负责创建原料家族中的每一种原料。 先来为原...原创 2012-05-23 17:19:47 · 75 阅读 · 0 评论 -
工厂模式:工厂方法
还是利用比萨店的例子,我们来看看一般工厂模式: 如果比萨店有许多加盟店,并且这些加盟店必须严格按照总部的要求生产比萨。 比如烘烤、切片、打包的方式。但允许加盟店根据各地的特色制作比萨。这要如何实现? 我们可以定义一个抽象类PizzaStore,这个类中有两个方法 orderPizza和createPizza,其中createPizza是抽象的。由子类来具体实现。 在orderPiz...原创 2012-05-23 00:12:07 · 77 阅读 · 0 评论 -
工厂模式:简单工厂
为什么要使用工厂模式? 先看一个例子: Duck duck = new MallardDuck();//野鸭 我们在实例化的时候,用的是具体类(new后面的是具体类)。绑定具体类会导致代码更脆弱,缺乏弹性。 当有一群相关类时,通常会写出这样的代码: Duck duck; if(picnic){ duck = new MallardDuck(); }else ...原创 2012-05-22 21:11:32 · 82 阅读 · 0 评论 -
设计模式:代理模式
1,抽象角色 package com.langsin.proxy; //抽象角色 public abstract class Subject { abstract public void request(); } 2,真实角色 package com.langsin.proxy; //真实角色 public class RealSubj...原创 2011-09-21 11:20:48 · 64 阅读 · 0 评论 -
设计模式:工厂模式
代码示例: 定义一个Person接口 package com.test.simplefactory; public interface Person { public String sayHello(String name); public String sayGoodbye(String name); } 定义两个具体类,分别实现Pe...原创 2011-09-18 14:27:02 · 67 阅读 · 0 评论 -
设计模式:策略模式
策略模式在集合类的Comparator中大量应用 策略模式也强调了一个设计原则:多使用组合,少用继承。 策略模式就是使用变量来强调“多使用组合” 下面定义一个使用策略模式来实现加减乘除 package com.test.strategy; /** * 抽象策略角色 * */ public interface Strategy { publi...原创 2011-08-16 23:02:39 · 73 阅读 · 0 评论 -
模板方法模式(Head first)
有人爱喝茶,有人爱喝咖啡,因为两者都含有咖啡因。 咖啡的冲泡方法: 茶的冲泡法: 1:把水煮沸 1:把水煮沸 2:用沸水冲泡咖啡 2:用沸水浸泡茶叶 3:把咖啡倒进杯子 3:把茶倒进杯子 4:加糖和牛奶 4:加柠檬 观察上面的步骤发现第1步和第...原创 2012-06-06 22:46:30 · 74 阅读 · 0 评论