美文网首页
headfrist 设计模式

headfrist 设计模式

作者: 木书 | 来源:发表于2017-11-04 22:21 被阅读16次

导语:此文章主要记述几种设计模式的定义、类图与设计原则,需要此前对设计模式有一定了解,详细可以阅读《head frist 设计模式》,若想一起讨论、学习,请加QQ群:518105162

一、策略模式:

定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。


策略模式

设计原则:

  • 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
  • 针对接口编程,而不是针对实现编程。
  • 多用组合,少用继承。

二、观察者模式

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。


观察者模式

设计原则:

  • 为了交互对象之间的松耦合设计而努力。

三、装饰者模式

动态地将责任附加到对象上。如要扩展功能,装饰者提供了比继承更有弹性的替代方案。


装饰者模式定义类图

星巴兹咖啡销售系统装饰者模式类图关系:

装饰者模式

四、工厂模式:

简单工厂:

  • 建立一个简单工厂
public class SimplePizzaFactory {

    public Pizza createPizza(String type) {
        Pizza pizza = null;

        if (type.equals("cheese")) {
            pizza = new CheesePizza();
        } else if (type.equals("pepperoni")) {
            pizza = new PepperoniPizza();
        } else if (type.equals("clam")) {
            pizza = new ClamPizza();
        } else if (type.equals("veggie")) {
            pizza = new VeggiePizza();
        }
        return pizza;
    }
}
  • 将生产披萨的任务委托给这个工厂
public class PizzaStore {
    SimplePizzaFactory factory;
 
    public PizzaStore(SimplePizzaFactory factory) { 
        this.factory = factory;
    }
 
    public Pizza orderPizza(String type) {
        Pizza pizza;
 
        pizza = factory.createPizza(type);
 
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;
    }

}

工厂方法模式:

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

工厂方法模式定义类图

披萨店关系类图:

  • 创建者类:


    工厂方法模式
  • 产品类:
工厂方法模式

抽象工厂模式:

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

设计原则:

  • 要依赖抽象,不要依赖具体类。

这个原则告诉我们,应该重写代码以便于我们依赖抽象类,而不是依赖具体类。对于高层及低层模块都应该如此。

五、单例模式(单件模式)

确保一个类只有一个实例,并提供一个全局访问点。


单例模式
  • 懒加载单例:
public class Singleton {
    private static Singleton uniqueInstance;
 
    // other useful instance variables here
 
    private Singleton() {}
 
    public static  Singleton getInstance() {
        if (uniqueInstance == null) {
            uniqueInstance = new Singleton();
        }
        return uniqueInstance;
    }
 
    // other useful methods here
    public String getDescription() {
        return "I'm a thread safe Singleton!";
    }
}
  • 急加载单例:
public class Singleton {
    private static Singleton uniqueInstance = new Singleton();
 
    private Singleton() {}
 
    public static Singleton getInstance() {
        return uniqueInstance;
    }
    
    // other useful methods here
    public String getDescription() {
        return "I'm a statically initialized Singleton!";
    }
}

如果不做处理的话,急加载单例比懒加载更加线程安全,但是如果懒加载使用synchronized“锁住”getInstance方法的话,就会变成线程安全的单例。但是这两种线程安全的方式都降低了程序性能,可以在使用懒加载时给uniqueInstance字段加volatile关键字以提高程序执行性能。

六、命令模式

将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。

七、适配器模式

适配器(adapter-pattern):将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

  • 对象适配器(组合)
  • 类适配器(多重继承):在Java中不能实现

外观模式(facade-pattern):提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

要点:

  • 当需要使用一个现有的类而其接口不符合需要时,使用适配器。适配器改变接口以符合客户期望。
  • 当需要简化并统一一个很大的接口或一群复杂的接口时,使用外观。外观将客户从一个复杂的子系统中解耦。
  • 适配器与装饰者的区别:适配器将一个对象包装起来以改变接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化接口。


    适配器类图

十一、代理模式

代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问。

  • 使用java RMI
    RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。
    制作远程服务的步骤:
    步骤一:制作远程接口
    步骤二:制作远程的实现
    步骤三:利用rmic产生的stub和skelton。
    步骤四:启动RMIregistry(rmiregisry)
    步骤五:开始远程服务

结语:

如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【喜欢】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。

相关文章

  • headfrist 设计模式

    导语:此文章主要记述几种设计模式的定义、类图与设计原则,需要此前对设计模式有一定了解,详细可以阅读《head fr...

  • 《HeadFrist 设计模式》读书笔记 —— 策略模式

    出现情形: 定义了一个父类鸭子,定义的有叫,游方法,子类有:活鸭子,玩具鸭子等,这时想在父类鸭子中加上飞这个操作,...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

网友评论

      本文标题:headfrist 设计模式

      本文链接:https://www.haomeiwen.com/subject/cjsfmxtx.html