
设计模式
timshinlee
这个作者很懒,什么都没留下…
展开
-
设计模式之中介者模式
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。中介者使各个对象间不需要显式地互相引用,所以可以使耦合松散,而且可以独立改变对象之间的交互。比如世界上的国家可以看成一系列同类对象,如果让这些国家单独沟通,类就会变得很复杂,此时可以使用一个中介者来封装国家之间的交互。国家类(关联中介者的实现):主要实现声明信息和接收信息的方法public abstract cla原创 2017-08-07 20:04:54 · 185 阅读 · 0 评论 -
设计模式之面向对象
界面逻辑与业务逻辑分离。使用继承与多态提高扩展性和复用性。原创 2017-07-30 19:12:25 · 177 阅读 · 0 评论 -
设计模式之桥梁模式
Bridge Pattern:将类的抽象部分与实现部分分离,使它们可以独立地变化。当一个类的分类可以有多种方式的时候,比如说手机里的应用,可以先按照手机品牌区分,然后再按照应用种类区分;也可以先按照应用种类来区分,然后再按照手机品牌区分。而且品牌和应用种类都可以随意添加。如果直接使用继承来实现,每增加一种品牌,就要多继承出已有应用种类数量的新品牌类,这显然是十分不科学的。根据合成/聚合复用原则,应该原创 2017-08-06 21:50:22 · 263 阅读 · 0 评论 -
设计模式之组合模式
组合模式可以用在树状结构的组合当中,把上下级对象抽象出一个基类,通过这个基类可以实现带分支的父节点,也可以实现单个末端节点。组合基类,提供添加和删除子分支的方法,尽管末端节点不需要添加分支,但还是把编辑子分支的方法统一放到基类当中省去判断节点种类。每个节点的职责可以直接抽象,或者设置一个默认实现:public abstract class Component { String name;原创 2017-08-05 22:56:07 · 200 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式:在不暴露一个聚合对象的内部表示的情况下,提供一种方法来按顺序访问该对象中的各个元素。抽象出一个聚合类,该类有个方法返回这个聚合类对应的抽象类:public interface Aggregate<T> { Iterator<T> iterator(); void add(T t); void remove(T t);}迭代器抽象类,可以抽象出hasNext()和ne原创 2017-08-05 21:14:08 · 174 阅读 · 0 评论 -
设计模式之备忘录模式
核心:在不破坏封装性的前提下,在该对象之外保存这个状态,以便之后可以将该对象恢复到原状态。比如说打游戏保存记录public class Test { public static void main(String[] args) { // 玩家初始状态 Player player = new Player(100, 100, 100); Syst原创 2017-08-04 21:41:41 · 261 阅读 · 0 评论 -
设计模式之适配器模式
接口或方法不兼容的时候,中间添加一个适配器用来间接调用目标方法。假设我们现在有一个Normal类class Normal { public void action() { System.out.println("normal action"); }}测试类已有的一个方法要求传入Normal类对象public class Test { public static原创 2017-08-04 20:45:25 · 156 阅读 · 0 评论 -
设计模式之状态模式
状态模式就是用来把多种条件的判断解耦,消除掉if-else或者switch语句。核心思想是创建基类定义每种条件要实现的抽象方法,然后拓展子类去实现,在子类中如果符合本条件则做出具体操作,如果不符就传递下去。这样添加或者删除分支只需要新建子类,然后至多修改两个上下子类即可。比如一个判断块:public void showState(Work work) { if (work.time < 12原创 2017-08-04 11:14:53 · 239 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。即用一个抽象类规定各种建造条件,再用另一个类规定建造细节。产品类:假设产品由多种部件组成,提供一个方法用来添加组件public class Product { private List<String> parts = new ArrayList<>(); public void addPart(Str原创 2017-08-02 23:29:44 · 187 阅读 · 0 评论 -
设计模式之外观模式
给诸多子功能分组封装调用,隐藏子功能细节。子系统:class SubSystemOne { void subFunctionOne() { System.out.println("subFunctionOne"); }}class SubSystemTwo { void subFunctionTwo() { System.out.printl原创 2017-08-02 23:01:32 · 255 阅读 · 0 评论 -
设计模式之原型模式
原型模式用于复制对象,需要实现Cloneable接口,重写Object类中的clone()。对于一个对象x来说,复制一般是要达到以下效果,虽然不是强制的: 1. x.clone != x 为true 2. x.clone.getClass() == x.getClass() 为true 3. x.clone.equals(x) 为true通常重写clone()是重写成调用super.clone原创 2017-08-02 10:57:35 · 191 阅读 · 0 评论 -
设计模式之模板模式
模板模式就是把父类中变化的地方抽离成抽象方法供子类实现,各个抽象方法的调用时机由父类去决定。模板类:public abstract class Parent { public void templateMethod() { childDependentMethod1(); childDependentMethod2(); fixedMethod(原创 2017-08-01 22:30:15 · 161 阅读 · 0 评论 -
设计模式之代理模式
假如有个男生想要追求隔壁班一个女生,但是又不认识这个女生,刚好同桌认识她,因此只能通过同桌送礼物给她。 假如两个人认识的话,可以直接送礼物,抽象成代码如下:class Pursuer { SchoolGirl mm; public Pursuer(SchoolGirl mm) { this.mm = mm; } public void giveFlowe原创 2017-08-01 21:59:45 · 180 阅读 · 0 评论 -
设计模式之装饰者模式
装饰者模式的基本组成是一个目标类和一个继承于(实现了)目标类的装饰基类,目标类可以抽象出基类和多个子类,而装饰基类可以派生出多种具体的装饰类。通过在目标类中指定一种行为,装饰基类继承于目标类,装饰基类及其子类通过重写这个行为方法,给目标类添加行为。装饰者模式特殊的一点是装饰类持有的引用,也就是依赖于目标类型,通过在行为方法中调用所依赖目标类型类的方法来实现行为的传承。目标基类:public abst原创 2017-08-01 14:59:40 · 286 阅读 · 0 评论 -
设计模式之工厂模式
初始例子运算类基类:public abstract class Operation { protected float numberA; protected float numberB; public float getNumberA() { return numberA; } public void setNumberA(float number原创 2017-07-30 22:55:21 · 199 阅读 · 0 评论 -
设计模式之职责链模式
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将多个对象连成一条链,沿着这条链传递请求直到有对象处理它为止。可以定义一个抽象类来表示处理事件的对象,这个类首先有个处理事件的抽象方法,然后提供一个方法设置下一级处理者。每个处理者只要知道下一个处理者是谁就可以了,耦合度很低,类似链表结构。处理者类,处理方法的参数可以原创 2017-08-06 23:29:39 · 318 阅读 · 0 评论 -
设计模式之访问者模式
访问者模式(Visitor Pattern):在不改变某对象结构中个元素的前提下,定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统,可以把数据结构和作用于结构上的操作解耦,使操作集合可以相对自由地变化。一种操作就相当于一个访问者。访问者模式将有关操作行为集中到一个访问者对象中。访问者模式的缺点在于会使数据结构的变化变得困难。比如男人和女人对于不同的事件有不同的反应,如果单纯抽象出P原创 2017-08-07 22:19:06 · 219 阅读 · 0 评论 -
设计模式之享元模式
享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。比如博客或者淘宝店铺,每个博客或者每间店铺之间都有一定的共性和差异,可以为所有的博客都提供一个公共的框架,只是内容可以根据具体博客进行改变,这样可以进行复用节省大量的资源。基本实现Flyweight类,可以接收外界状态进而表现出不同的形式public abstract class Flyweight {原创 2017-08-07 21:22:04 · 218 阅读 · 0 评论 -
设计模式之命令模式
命令模式:将一个请求封装成一个对象,从而可以使用不同的请求对客户端进行参数化,还可以记录请求日志和撤销请求。当我们发出一个或者多个请求的时候,如果请求的接收者和执行者重合的话,会导致职责过重。如果将请求接收者和请求执行者分开,才能比较好地对请求进行管理和完成。一个典型的例子就是餐厅点餐,服务员负责接受客人点餐,厨师负责完成炒菜。原创 2017-08-06 22:05:09 · 227 阅读 · 0 评论