设计模式总览

来源:互联网 发布:网络性能测试 编辑:程序博客网 时间:2024/05/17 01:23
23种设计模式,分31.创建模式(5):关注对象的创建过程    Singleton // 整个JVM 只有一个实例,注意可破坏单例的方法及其防止办法    //单例的5种方式:恶汉 懒汉 double-check 静态内部类 枚举        1.防止反射创建多个对象            private static Singleton instance = new Singleton();            private Singleton(){                if(instance != null){                    throw new Exception("");                }            }        2.防止系列化和反序列化创建多个对象            public void readResolve(){                return instance; //返回唯一对象            }        3番:在测试各种方式的效率时,用了CountDownLatch    SimpleFactory/FactoryMethod/AbstractFactory        //SimpleFactory 违反了COP(Close-Open Precinple 原则),但是因为简单且容易维护,实际中用的比较多        //FactoryMethod 理论上更符合面向对象的设计思维,但是容易造成类膨胀,难以维护,实际用的少,一个类配一个具体工厂类        //?AbstractFactory 适用于产品组,与Builder的区别:            AbstractFactory 是多个产品组成一个产品组            Builder 是多个部件组成一个产品    Prototype //复制对象,深克隆(不持有原对象的引用)和浅克隆(还持有原对象的引用)        使用场景        Spring 中创建对象的方式不仅有Singleton,还有Prototype    Builder //多个部件组成一个对象。部件不同,组成的对象也不相同        比如:电脑可以由多个品牌的cpu 主板 内存组成2.结构模式(7):关注类和对象的组织结构    Proxy/Dynamic Proxy        目的:        1.只实现核心业务,其他旁支业务有其他实现(AOP/JDK自带的InvocationHandler可实现)        2.为真实对象提供一个代理,从而控制对真实对象的访问    FlyWeigt //共享资源,凡是带有的都实现了这个接口,比如 常量池(String)、线程池、有点类似于缓存系统    Facade  // 对外提供统一的接口,避免暴露过多的实现    Decorator //用于原有对象功能的扩展,装饰对象,使得对象可以有更多的功能,比继承更灵活,典型的实现是IO流的包装    Compose Pattern //将对象组合成树状结构以表示部分和整体层次结构,使客户可以统一调用Leaf Container对象3部分,AbstractComponent/Container/ConcreteComponent,对于容器和组件做统一的处理        现实中的案例有,对树的遍历            XML的解析            对树型结构(比如文件系统)的遍历(对文件夹和文件做统一处理)            杀毒软件查杀文件    Adapter //适用于 新老系统的对接,新老接口不兼容,需要中间的适配过程    Bridge //处理多层次继承结构,适用于多个变化量维度的情况,比如电脑类型 分 1)平板 2)笔记本 3)台式  电脑品牌1)苹果 2)华硕 3)联想        现实中的案例有--需要Bridge将两个变化维度连接起来            奖金的发放:1)季度奖金 2)项目奖金 3)绩效奖金                       1)个人奖金 2)团队奖金 3)部门奖金3.行为模式(11):关注系统中对象之间的交互,研究对象之间的相互通信和协作,进一步明确对象的职责    Interpreter/Visitor/Command 用的比较少(王垠比较推崇这几种模式,我只能说,层次不同,关注的东西也不一样)    Template Method:也就是回调    Mediator:每个对象都可能需要跟另外一个或者是几个对象打交道,就需要一个调停者    ChainOfResponsibility:处理流程,侧重于操作者的顺序流动(比如请假单中批假的领导变化)    State:处理流程,侧重于被操作对象的状态变化以及在这个变化下可以有什么样的操作(请假单的状态变更)    Memento:备份还原,适用场景:数据库的还原。需要一个Context来保持备份的版本,可一个,也可多个。    Stategy:针对一个行为,有多个策略。只能选取其中一种执行。    Iterator:对容器里对象的迭代,一般是作为容器类的内部类。每种容器都有自己的迭代方式    Obsever:Pub-Sub 模式
0 0
原创粉丝点击