摘要:
组合模式:本质就是把不该是继承关系的类,改成树形结构,有树根节点,树中间节点和叶节点。 比如例子: 关系 学校 → 学院 → 专业 他们之间并非是继承关系,而是包含关系,或者说是组合关系。 随时有可能移除学院、增加学院、移除专业、增加专业;所以继承就不够灵活。 先创建一个共同的父类(此处接口也可以, 阅读全文
摘要:
装饰者模式 用于多个类可以相互组合,甚至多数量,多类品组合,而组合完,我们还要访问它们的某个都拥有的属性;这种多变的场景就非常适合装饰者模式 比如以下例子: 咖啡馆: 咖啡品类:无因咖啡、黑咖啡、意大利咖啡等 调料品类: 牛奶、豆浆、巧克力等 客户可以点一杯咖啡 + 若干牛奶、豆浆、咖啡的,搅拌在一 阅读全文
摘要:
原型模式主要是用于拷贝对象,而生产新的对象 传统的拷贝方式: // 创建一只叫sheep,1岁了的羊 Sheep sheep1 = new Sheep('sheep', 1); // 拷贝这只羊 Sheep sheep2 = new Sheep(sheep1.getName(), sheep1.ge 阅读全文
摘要:
很常用的一种设计模式,比如所谓的MVP架构就是典型的中介者模式 MVC 框架时代, M V C 三者之间皆可以相互操作,导致后期维护的难度升高,之后就引入了MVP架构来进行解耦,本质就是使用中介者模式的思想。 这里就不多做解释了,大家应该都用过MVP吧 还是举个例子: 现在有n个买家和n个卖家;他们 阅读全文
摘要:
享元模式:就是为了共享对象,将已生成的对象存储起来,下次如果还是要这个对象,直接返回该存储的对象。也是我们工作中常用的设计模式 例子: public class WebSiteFactory { //集合,充当池的作用 private HashMap<String,ConcreteWebSite> 阅读全文
摘要:
适配器模式本质是为了解决 对接另外一个接口时,发现两边的数据格式或者一些原因导致不能直接对接;这是很正常的现象;当为了实现低耦合即尽量不要修改大量代码去适配对接接口,就应该抽象出一层适配层,即适配类来完成两边的对接工作。 适配器模式分为两种 类适配方式,即通过继承来完成 对象适配方式,即通过代理来完 阅读全文
摘要:
基本介绍 外观模式(Facade),也叫过程模式,主要是为一组接口提供一个一致的“界面”,也就是定义一个更高层的接口,来对这一组接口进行统一的调度。这个接口使得者一组接口更容易使用。 外观模式通过定义一个一致的接口,就可以屏蔽这一组子接口的内部细节,使得调用防只需跟这个外观接口交互,而无需关系内部细 阅读全文
摘要:
编写软件过程中,程序员面临着来自耦合性、内聚性以及可维护性、可扩展性、重用性、灵活性等多方面的挑战,设计模式是为了让程序具有更好的: 1. 代码重用性(相同功能代码,不用多次编写) 2. 可读性(编程规范性) 3. 可扩展性(增加新功能时十分方便) 4. 可靠性(增加新功能后,对原来的功能没有影响) 阅读全文
摘要:
命令模式基本介绍 命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但并不知道请求的接受者是谁,也不知道被请求的操作是具体如何执行 命令模式使得请求发送者和请求接受者之间松耦合。 命令模式支持撤销功能 如何解决 通过调用者发送指令,接受者接受指令并执行指令; 阅读全文
摘要:
基本介绍 桥接模式(Bridge模式):将实现与抽象放在两个不同的类层次中,使两层次可以独立改变 是一种结构型设计模式 说白了就是有多个维度的变化,这样的组合关系如果按照传统的方式会导致类爆炸,所以需要将两个维度抽象出来,然后让其通过对象进行组合,来减少类的创建 用手机来举例 当前有两个维度:1. 阅读全文
摘要:
建造者模式主要是为了解决创建对象时的一些问题 比如: 一个类有多个成员,可是初始化它时,有些成员必须传入,有些成员可以不传,这导致我们需要重载很多构造函数,着实蛋疼;或者成员过多,导致构造函数入参过多,构造函数很长的痛点 构造函数用法: public class Person { private S 阅读全文
摘要:
最复杂的设计模式,并且使用频率不高,《设计模式》的作者评价为:大多情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。 访问者模式是一种将数据操作和数据结构分离的设计模式。 例子: 年底,CEO和CTO开始评定员工一年的工作绩效,员工分为工程师和经理,CTO关注工程师的代码量、 阅读全文
摘要:
备忘录模式看似不常见,其实挺常见的;比如著名的React 的时间旅行功能,就是备忘录模式的体现;还有一些游戏的存档、读档功能也是备忘录模式 例子: 先创建一个用于存档英雄血量的类: 时刻档类 public class Memento { // 英雄血量 private int bloodState; 阅读全文
摘要:
抽象工厂模式 是在工厂方法模式上的再一次抽取 1. 将工厂方法模式中的公共方法提出,放入一个单独的类中 2. 将抽象工厂父类 改为 接口,==进一步的抽象== 3. 由各个子类去实现该接口中的抽象方法 ##### 这样工厂为一个对象簇,披萨为一个对象簇,工厂代码更容易维护。 ### ==在工厂方法模 阅读全文
摘要:
应用案例:客户点披萨时,可以点不同地点、不同口味的披萨,比如北京的奶酪披萨、北京的胡椒披萨 或者伦敦的奶酪披萨、伦敦的胡椒披萨 相比于简单工厂模式的案例,多了一个维度条件,直接使用简单工厂模式的话,会导致多个简单工厂类中有大量重复的代码,这里相当于使用了一个模版方法模式,抽取重复的部分到父类,而抽象 阅读全文
摘要:
简单工厂模式 属于创建性模式,功能:又一个工厂对象决定创建出哪一种产品类的实例 是最简单最实用的模式 下面用披萨工厂举例: // pizza 父类 public class Pizza { private String name = ""; public void setName(String na 阅读全文
摘要:
所谓单例模式,就是采取一定的方法保证整个软件系统,对某个类只存在一个对象实例,且该类只提供一个取得其对象实例的方法。 饿汉式单例模式(静态变量) /** * 饿汉式 * 线程安全 */ public class Singleton { private static Singleton instanc 阅读全文