• 设计模式那些个事儿


    简单工厂模式比较适用于事先已经考虑到的可能出现的算法,来构造工厂类实现,如果需要添加新的类,则就需要改变工厂类了,违反开闭原则,简单的说,简单公共适应与业务变化不是很剧烈的场景下如,审批业务,设计时可以判断到的只有“部门经理审批”,“总裁审批”不会过几天又要加入“组长审批”,去修改工厂类,相对来说变化不是很剧烈的。

    在软件设计中经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如果我们使用简单工厂,这样会不断地修改工厂类,应对业务变化,违反开闭原则,另外因为实例化产品的判断逻辑在工厂类中,工厂类会变的越来与臃肿。

    简单工厂模式

    定义:
    简单工厂模式是类的创建模式,又叫静态工厂方法模式,由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,涉及到工厂角色、抽象产品角色以及具体产品角色。
    GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

    工厂方法模式

    工厂方法模式又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂模式(Polymorphic Factory),定义一个用户创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到其子类。工厂方法模式UML--注意工厂方法有CreateProduct方法,用来返回具体的产品

    桥接模式

    应用场景:当系统有多维角度分类时,而每一种分类又有非常强的变化时,使用桥接模式比较合适

    优点: •Bridge模式使用“合成/聚合复用原则(CARP)”解耦了抽象和实现之间的高耦合关系,使得抽象和实现可以沿着各自的维度来变化(通过各自继承)。
    •抽象化角色和具体化角色之间增加更多的灵活性,当有新的抽象或实现方式时,只需要继承一个抽象和继承一个实现即可。

    •实现化角色的任何改变不影响客户端。

    缺点: •Bridge模式不能应对维度数量的变化,如果要重新抽象出另外一个维度类型,则需要修改抽象角色,将新的实现(Implemetor)组合进抽象(Abstraction)中,违反开闭原则(OCP)

    门面模式(外观模式 Facade Patten)

    对外提供统一的访问(请求)入口,这样,内部的改变不会影响到外部的访问。http://c.biancheng.net/view/1369.html

    支付中心dubbo服务端对外提供接口,用的是门面模式。

    模板方法模式

    模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。

    模板方法模式通常适用于以下场景:

    1. 算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
    2. 当多个子类存在公共的行为时,可以将其提取出来并集中到一个公共父类中以避免代码重复。首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
    3. 当需要控制子类的扩展时,模板方法只在特定点调用钩子操作,这样就只允许在这些点进行扩展。

    模板方法模式的扩展:

    在模板方法模式中,基本方法包含:抽象方法、具体方法和钩子方法,正确使用“钩子方法”可以使得子类控制父类的行为。如下面例子中,可以通过在具体子类中重写钩子方法 HookMethod1() 和 HookMethod2() 来改变抽象父类中的运行结果,其结构图如图 3 所示。

    含钩子方法的模板方法模式的结构图

    扩展:spring-web中的RestTemplate, spring-jdbc的JdbcTemplate
     

    单例模式

    另行整理,见(https://www.cnblogs.com/buguge/articles/13731884.html)。

    单例模式,其在整个应用程序的生命周期中只存在一个实例。分懒汉式单例 and 饿汉式单例,本文介绍两种单例模式,以及,多线程并发情况下的懒汉式单例模式改造及代码分析。


    当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
    本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/archive/2012/06/25/2561357.html


  • 相关阅读:
    【C语言】用"I love you!"打印心形
    android js与控件交互初探。
    android 调用webview控件,为逆向h5app做准备
    git命令
    kdevelp 导入makefile工程
    解决vmvare关闭过慢
    用python.twisted.logfile每天记录日志,并用不记录stdout中的内容
    关于bjam编译自己模块出错的问题
    俄罗斯黑客在美国监狱中获刑4年,到底是什么原因?
    美国的电信巨头T-Mobile今天披露了另一起数据遭黑客泄露事件
  • 原文地址:https://www.cnblogs.com/buguge/p/2561357.html
Copyright © 2020-2023  润新知