
设计模式
Hammond_
这个作者很懒,什么都没留下…
展开
-
设计模式总结
核心目标管理变化,提高复用抽象思想代替分解思想八大原则依赖倒置原则(所有可能变化的实现类都依赖于稳定接口)开闭原则(不改变已有类的结构,使用扩展的方式开发)单一职责(不要将与class对象无关的功能放置在一个class中)重构技法静态------动态早绑定--------晚绑定继承---------组合编译时依赖----------运行时依赖紧耦合---------松...原创 2020-01-15 22:12:37 · 134 阅读 · 0 评论 -
解析器
动机:业务规则频繁变化,类似结构不断重复出现class Expression{ public int interpreter(Map<String,int> list);}class StringExpression extends Expression{ @Override public int interpreter(Map<String,int> lis...原创 2020-01-15 22:13:20 · 157 阅读 · 0 评论 -
访问器
动机:由于类层次变化,导致违背开闭原则class Element{ public void fun1(); //改变 public void fun2();}class E1 extends Element{ public void fun1(){ /... } //改变 public void fun2(){ /*** }}class E2 extends...原创 2020-01-15 22:13:39 · 163 阅读 · 0 评论 -
命令模式
动机:原创 2020-01-15 22:14:31 · 122 阅读 · 0 评论 -
职责连
动机:一个请求被多个对象处理,但是每个请求限定运行时只能有一个接受者,也就是在同一时间只能被一个对象处理class ChainRequest{ ChainRequest cr; public boolean canHandle(); public void process(); public boolean hasNext(){ ... } public void next()...原创 2020-01-15 22:14:24 · 116 阅读 · 0 评论 -
迭代器
动机:集合内部对象变化,虚妄不暴露内部结构同时让外部代码访问其中元素class Iterator<T>{ public void first(); public T next(); public boolean hasNext(); public Iterator<T> Iterator();}class MyCollection implements It...原创 2020-01-15 22:14:18 · 124 阅读 · 0 评论 -
组合模式
动机:由于有些对象独特的数据结构,原创 2020-01-15 22:15:13 · 149 阅读 · 0 评论 -
备忘录模式
动机:要求程序回溯到对象之前处于某个节点时的状态,如果使用一些公有接口来获取对象状态,这样会暴露细节实现class Memento{ }原创 2020-01-15 22:15:07 · 123 阅读 · 0 评论 -
状态模式
动机:对象的状态经常面临变化,但是对象又需要有效的管理原创 2020-01-15 22:15:09 · 157 阅读 · 0 评论 -
中介者模式
动机:为了解“组件"和”元素“之间的耦合,模型变化了页面元素也必须跟着变化,需要有一个控制中心来解决他们之间的依赖这种关系就像是模板方法模式,多个对象间之间才需要解耦合,如果对象之间没有依赖关联,那么也没必要使用该模式...原创 2020-01-15 22:13:05 · 105 阅读 · 0 评论 -
适配器
动机:对象改变环境的时候,对象无法完美的与新环境结合,给“迁移的变化”影响了class Target{ public void process();}class Adaptee{ public void foo(); public int bar();}class oldAdaptee implement Adaptee{ @Override public void foo...原创 2020-01-15 22:15:00 · 111 阅读 · 0 评论 -
代理模式
动机:对象创建开销很大,某些操作需要安全控制,或者需要进程外的访问class IA{ public void precess();}class A implements IA{ @Override public void precess(){...}}class ClientApp{ IA ia; public void doingSomething(){ .....原创 2020-01-15 22:16:41 · 118 阅读 · 0 评论 -
门面(Facade)模式
动机:接口之间如果有依赖,需要添加一层(稳定)接口解耦合例如:假设A方案是MYSQL的连接模型,如果按照A方案设计的话,客户需求改动(改成ORACLE),那么A方案中子类的代码改动就会非常大假设B方案,子类还是需要改动,但是Facade向外暴露的是相同的接口,所以外部的方法不用变化也就是Facade向外提供了一个(稳定)的接口Facade设计模式更重要的是从架构层次看系统,主要是隔离作...原创 2020-01-15 22:16:38 · 184 阅读 · 0 评论 -
享元模式
动机:大量的对象(几万个,几十万个)导致程序内存需求变得非常大,享元模式就能解决当前问题(线程池,常量池)class Font{ String key;}class FontFactory{ private HashMap<String,Font> fontPool; public Font getFont(String key){ if(fontPool.con...原创 2020-01-15 22:16:32 · 110 阅读 · 0 评论 -
单例模式
动机:对于面向对象编程,总会有对象的存在,有时候希望在系统中只需要一个实例,这时候可以从性能上考虑优化使用单例模式class SingleClass{ //c++需要声明这个私有构造器, private SingleClass singleClass; public Lock lock; private SingleClass(){ ... } //线程不安全 public Si...原创 2020-01-15 22:16:11 · 143 阅读 · 0 评论 -
构建器模式
动机:创建一个复杂的对象,这个对象各个部分剧烈变化,但是组合到一起却相对稳定(跟Template Method很像)在这里插入代码片原创 2020-01-15 22:15:27 · 137 阅读 · 0 评论 -
原型模式
动机: 隔离某些结构复杂的对象创建工作class ISplitter{ public void split();}class ISplitterFactory{ public ISplitter createISplitter(...);}class FileSplitter extends ISplitter implements ISplitterFactory{ @Ove...原创 2020-01-15 22:15:25 · 119 阅读 · 0 评论 -
抽象工厂
动机:一系列相互依赖的对象创建,为了避开new所带来的紧耦合原创 2020-01-15 22:17:54 · 118 阅读 · 0 评论 -
工厂模式
动机:传统创建对象必须用new的方式,为了解决new带来的紧耦合缺点:每个create方法返回对象都必须参数相同,因为他们都继承了SpilitterFactory基类class Splitter{ void split();}class FileSplitter extends Splitter{ @Override void split(){ //... }}clas...原创 2020-01-15 22:17:48 · 129 阅读 · 0 评论 -
面向对象设计原则
设计模式就是为了让代码复用性提高,所谓的复用性就是将需求变化带来的变化影响到最小多态就能很好体现了抽象带来的便利,由一个对象接口多种不同的实现,转而交给程序判断对象应该是什么样子衡量设计模式使用的是否正确,应该用尺子(面向对象设计原则)衡量依赖倒置原则:稳定的类和不稳定的类中依赖关系分离出来,将他们共同指向并依赖于一个抽象的对象(由JVM编译器管理(多态接口,继承))高层模块(稳...原创 2020-01-15 22:18:25 · 122 阅读 · 0 评论 -
Template Method
Template Method主要利用抽象方法给应用提供扩展点,并在方法中实现控制反转,被Template Method调用的抽象方法可以protected在方法中需要知道需求中变化点和相对稳定的地方,将其区分开来,稳定的部分放入方法中,变化的部分做成抽象方法暴露给子类,让子类自己实现,这样实现了晚绑定public class templateMethodTest{ protected vo...原创 2020-01-15 22:18:19 · 124 阅读 · 0 评论 -
Strategy
动机:算法经常改变,算法编写到对象中会使得对象复杂,而且有时候支持不适用的算法也是一种负担(if-else过多的时候,需要小心,判断条件是否会改变)public enum country{ china, japan, france, africa//改变}class sale{ TaxBase tb; public void calculate(){ if(tb == c...原创 2020-01-15 22:13:54 · 130 阅读 · 0 评论 -
Observer(观察者模式)
动机:对某些对象建立一种“通知依赖关系”,一个对象改变了,所有的依赖对象都将得到通知编译式依赖:A依赖B,编译的时候编译A的时候B必须存在需求:将一个东西变成两份(int整型),并通知返回到前端class A{ int num; TextObject to; public A(int n,TextObject temp){ this.num=n; this.to=temp; ...原创 2020-01-15 22:12:09 · 143 阅读 · 0 评论 -
装饰模式
动机:由于多重的继承带来的重复很多代码,为了解决这种子类衍生问题class Stream{ public void seek(){ ... }}class FileStream extends Stream{ @Override public void seek(){ ... }}class NetworkStream extends Stream{ @Overr...原创 2020-01-15 22:11:47 · 128 阅读 · 0 评论 -
Bridge模式
动机:由于某些类型具有多种不同方向的变化(平台与实现),应对多维度的变化解耦合class Message{ public login(){ ... } public play(){ ... }}class PCMessage extends Message{ @Override public play(){ ... }}class PEMessage extends Mes...原创 2020-01-15 22:17:35 · 162 阅读 · 0 评论