重学java23种设计模式
墨墨向北
这个作者很懒,什么都没留下…
展开
-
迭代器模式
迭代器模式(Iterator Pattern)属于行为型模式。用于顺序访问集合对象的元素,而且不需要知道集合对象的底层结构。迭代器接口,定义了访问集合的两个方法public interface Iterator { public boolean hasNext(); public Object next();}获取迭代器的接口,所有集合要实现这个接口public interface原创 2017-06-16 18:09:30 · 218 阅读 · 0 评论 -
观察者模式
当对象间存在多对一的依赖关系时,可以使用观察者模式(Observer Pattern)。观察者模式属于行为型模式。概况的说就是:一个类(被观察者Observable)管理着所有依赖于它的类(观察者Observer),并且它状态变化时会主动给这些依赖它的类发出通知。自定义观察者模式的demo:观察者接口:public interface Observer { void update(Obser原创 2017-06-11 23:34:20 · 204 阅读 · 0 评论 -
建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式。有一些复杂的对象他包含的基本部件不会变,而基本部件组合经常变化的时候,就可以使用建造者模式。常用的就是Builder的链式调用,demo:public class Meal { private boolean eatRice; private boolean原创 2017-06-12 20:37:10 · 781 阅读 · 0 评论 -
装饰器模式
装饰器模式(Decorator Pattern)属于结构型模式。用户向一个现有的对象添加新的功能,同时又不改变其结构。例如,现在有个Girl类,学习的是语数外。现在有的女孩也有学习其他特长,在不改变Girl类的情况下,添加学习舞蹈、唱歌、绘画等特长。Child抽象类:public abstract class Child { abstract void learn();}Girl类:pub原创 2017-06-23 21:32:51 · 233 阅读 · 0 评论 -
模板方法模式
模板方法模式(Template pattern)属于行为模式,用于定义构建某个对象的步骤与顺序,或者定义一个算法的骨架。可以在一个抽象类公开定义执行它的包含执行顺序方法的方法,它的子类可以按需要重写方法实现。demo:游戏的模板抽象类:public abstract class Game { // 子类需要实现的方法 public abstract void startGame();原创 2017-06-24 15:38:56 · 243 阅读 · 0 评论 -
解释器模式
解释器模式(Interpreter Pattern)属于行为型模式。意图是给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。一个简单的demo:当前的环境,用于存储当前环境下自定义变量的真假public class Context { private Map<Variable, Boolean> map = new HashMap<>(); //原创 2017-06-25 21:53:30 · 214 阅读 · 0 评论 -
策略模式
策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。这时候可以将这些不同的行为封装成一个一个的类,实现同一个接口,供在运行时会改变行为的类调用。demo:不同方法抽象出来的供外部调用的接口:public interface Strategy { void execute();}具体的方法:public class Stra原创 2017-06-13 19:56:26 · 160 阅读 · 0 评论 -
桥接模式
桥接模式(Bridge pattern)属于结构型模式。是用于把抽象化与实现化解耦,使得二者可以独立变化。当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。就可以用桥接模式。简单的demo:比如食物有牛奶,米饭,香蕉。我要吃饭就吃从这些食物中选。桥接模式可以将抽象的我要吃的那顿饭和实体的食物解耦。食物抽象类:public interface Food { void getFood(原创 2017-06-26 18:21:11 · 187 阅读 · 0 评论 -
命令模式
命令模式(Command Pattern)属于行为型模式。这个模式将请求通过命令的形式封装成对象。用来将“行为请求者”与“行为实现者”解耦,这样用户只需要提出一个命令,而不用关心这个命令由谁实现。应用场景:比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的,可以采用命令模式。命令接口:public interface Task { void execute(原创 2017-06-27 11:19:26 · 278 阅读 · 0 评论 -
代理模式
代理模式(Proxy Pattern)属于结构型模式,在程序中添加中间层,为象提供代理来控制对对象的访问。这种模式解决了直接访问对象带来的问题,例如买火车票不一定在火车站买,也可以去代售点,更加方便。例如,直接访问有些对象会产生很大的开销,我们可以加个代理层,节约性能。等等。demo:图像接口:public interface Image { void display();}真正的图像处理原创 2017-06-14 21:13:46 · 164 阅读 · 0 评论 -
原型模式
原型模式(Prototype Pattern)属于创建型模式。用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式可以用来创建重复对象。java中通过实现Cloneable接口,重写clone方法实现。一个简单的浅克隆的demo:public class ProtoType implements Cloneable { private int num; public原创 2017-06-22 14:36:01 · 290 阅读 · 0 评论 -
工厂模式
工厂模式有三种:1、简单工厂模式(Simple Factory Pattern)简单工厂模式又称之为静态工厂方法,属于创建型模式。是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。eg:抽象类:public interface Car { void drive();}具体实现:public class Benz implements Car { @Ove原创 2017-06-10 01:15:45 · 214 阅读 · 0 评论 -
责任链模式
责任链模式(Chain of Responsibility Pattern)属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。下面的demo为我们常见的log打印:定义Log责任链的接口:public abstract class Log { // log等级 public stat原创 2017-06-17 18:37:26 · 233 阅读 · 0 评论 -
享元模式
享元模式(Flyweight Pattern)属于结构型模式。主要用于减少创建的对象数量,来减少内存占用,提高性能。用法是将很多对象分为几类,确定每个类对象的唯一标示,可以用HashMap存储。简单的demo: 画很多圆的时候,不需要每个圆形都创建一个对象,假设创建不同颜色的画笔是一个很大的开销,就可以以颜色进行分类,一种颜色的圆形只创建一个对象。画图形的接口:public interface S原创 2017-06-18 20:46:33 · 257 阅读 · 0 评论 -
状态模式
状态模式(State Pattern),属于行为型模式。允许对象在内部状态发生改变时改变它的行为,看起来好像修改了它的类。当代码中包含大量与对象状态有关的条件语句时就可以使用状态模式。可以将各种具体的状态类抽象出来,对象的行为依赖于它的状态(属性),所以状态改变而改变它的相关行为。也就是可以修改类的属性,属性改了,依赖于属性的方法也就改变了。非常简单的一个demo:包含State状态的类:publi原创 2017-06-28 18:18:04 · 258 阅读 · 0 评论 -
组合模式
组合模式(Composite Pattern),属于结构型模式,组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(叶子对象)和组合对象(组合对象)具有一致性(统一的接口),在调用时可以忽略复杂的层次结构,使用统一的方式去操作层次结构中的所有对象。使程序能够与复杂元素的内部结构解耦。下面是一个操作文件夹的demo:文件结构: 文件接口:public abstract原创 2017-06-19 19:51:49 · 214 阅读 · 0 评论 -
中介者模式
中介者模式(Mediator Pattern)式属于行为型模式。是用来降低多个对象和类之间的通信复杂性。:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。比如:MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。一个简单的聊天demo:用户:public class User { private原创 2017-06-29 16:17:23 · 350 阅读 · 2 评论 -
适配器模式
适配器模式(Adapter Pattern)属于结构型模式,他用于将一个类的接口转换成用户希望的另外一个接口。 在适配器模式中,我们可以定义一个包装类,包装不兼容接口的对象。demo: 机器人生产厂家想生产一个新产品,可以模仿狗叫,狗跑的机器人机器人接口:public interface Robot { void speak(); void move();}目前生产的机器人,代号原创 2017-06-20 19:38:46 · 220 阅读 · 0 评论 -
单例模式
作用:保证一个类只有一个实例,并提供一个访问它的全局访问点原创 2017-06-09 01:34:52 · 177 阅读 · 0 评论 -
访问者模式
访问者模式(Visitor Parttern)属于行为模式,主要用于将数据结构和数据操作分离。使用时,在被访问的类中添加一个方法,通常方法的参数是访问者,这样可以将自身引用传入访问者。总而言之就是,被访问者提供可以访问自身的接口,访问者来操作数据,通过这样实现解耦。可以使用在在对象结构很少变化,对对象的操作经常变化场景中,比如报表统计,过滤器等等。一个访问计算机组件的demo:计算机的部件的接口,对原创 2017-06-30 11:28:22 · 268 阅读 · 0 评论 -
外观模式
外观模式(Facade Pattern)属于结构型模式。用来向用户提供一个可以访问系统的接口。在用户调用和复杂系统之间再加一层,这一层用来将处理调用顺序和依赖关系。demo: 在开电脑和关电脑的时候,我们不需要知道电脑的内部结构,只需要按开关就可以了电脑中CPU、硬盘、网络的启动和关闭:public class Cpu { public void start(){ Syst原创 2017-06-21 11:10:18 · 209 阅读 · 0 评论 -
备忘录模式
备忘录模式(Memento Pattern)式属于行为型模式。他用来保存一个对象的某个状态,以便在适当的时候恢复对象。很简单的demo:记录对象的状态public class LastState { private String state; public LastState(String state) { this.state = state; } pu原创 2017-06-15 17:21:38 · 265 阅读 · 0 评论