大厂学院 - 设计模式与框架源码分析

## Download: [大厂学院 - 设计模式与框架源码分析](http://www.ukoou.com/resource/988/she-ji-mo-shi-yu-kuang-jia-yuan-ma-fen-xi) ### 大厂学院 - 设计模式与框架源码分析 - 设计模式与6大原则 Design Pattern 代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。如果你要想在 Java 界做得风生水起,游刃有余,设计模式必不可少,更不可少的更是设计模式的优化技巧。 结构型模式 创建型模式 行为型模式 ![image.png](//cdn.miwangke.com/storage/uploads/202106/493241e34cc2bb55661729ad5e85a18a.png) ### 大厂学院 - 设计模式与框架源码分析 - 原型模式 1 克隆羊问题 现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10 只羊。 2 传统方式解决克隆羊问题 1) 思路分析(图解) Sheep类 复制代码 package com.lin.prototype; public class Sheep { private String name; private int age; private String color; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Sheep(String name, int age, String color) { super(); this.name = name; this.age = age; this.color = color; } @Override public String toString() { return "Sheep [name=" + name + ", age=" + age + ", color=" + color + "]"; } } 复制代码 Client类 复制代码 package com.lin.prototype; import com.lin.prototype.puls.Sheep; public class Client { public static void main(String[] args) throws CloneNotSupportedException { Sheep sheep = new Sheep("tom", 3, "黑色"); Sheep sheep1 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor()); Sheep sheep2 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor()); Sheep sheep3 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor()); Sheep sheep4 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor()); Sheep sheep5 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor()); System.out.println(sheep1); System.out.println(sheep2); System.out.println(sheep3); System.out.println(sheep4); System.out.println(sheep5); } } 复制代码 3 传统的方式的优缺点 1) 优点是比较好理解,简单易操作。 2) 在创建新的对象时,总是需要重新获取原始对象的属性,如果创建的对象比较复杂时,效率较低 3) 总是需要重新初始化对象,而不是动态地获得对象运行时的状态, 不够灵活 4) 改进的思路分析 思路:Java 中 Object 类是所有类的根类,Object 类提供了一个 clone()方法,该方法可以将一个 Java 对象复制一份,但是需要实现 clone 的 Java 类必须要实现一个接口 Cloneable,该接口表示该类能够复制且具有复制的能力 =>原型模式 4 原型模式-基本介绍 基本介绍 1) 原型模式(Prototype 模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 2) 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节 3) 工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone() 4) 形象的理解:孙大圣拔出猴毛, 变出其它孙大圣 5 原型模式原理结构图-uml 类图 原理结构图说明 1) Prototype : 原型类,声明一个克隆自己的接口 2) ConcretePrototype: 具体的原型类, 实现一个克隆自己的操作 Client: 让一个原型对象克隆自己,从而创建一个新的对象(属性一样) ### 大厂学院 - 设计模式与框架源码分析 - 桥接 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。 **介绍** 意图:将抽象部分与实现部分分离,使它们都可以独立的变化。 主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。 何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。 如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。 关键代码:抽象类依赖实现类。 应用实例: 1、猪八戒从天蓬元帅转世投胎到猪,转世投胎的机制将尘世划分为两个等级,即:灵魂和肉体,前者相当于抽象化,后者相当于实现化。生灵通过功能的委派,调用肉体对象的功能,使得生灵可以动态地选择。 2、墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的。 **优点**: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。 **缺点**:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。 **使用场景**: 1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。 2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。 3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。 **注意事项**:对于两个独立变化的维度,使用桥接模式再适合不过了。
上一篇:Codeforces Round #719 (Div. 3) E. Arranging The Sheep(中位数)


下一篇:E. Arranging The Sheep