设计模式

设计模式:

设计模式的核心在于提供相关问题的解决方案,使得人们可以更加简单方便地复用成功的设计和体系结构。

设计模式一般包含4个基本元素
1.模式名称
2.问题
3.解决方案
4.效果

按设计模式的目的可以分为三大类

1.创建型模式:与对象的创建有关

1.Simple Factory(简单工厂)

定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常具有相同的父类。因为在简单工厂模式中创建实例的方法是静态的,因此简单工厂模式又被称为静态工厂方法。
该模式中最核心的部分是ChartFactory.它通过客户端传递的参数不同选择不同的具体的产品对象,并实现该产品对象中的方法。
能将对象的创建和使用分离。但如果需要创建新的具体产品时就很难完成了。
设计模式

2.Factory 工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定哪个类实例话。工厂方法模式让一个类的实例化延迟到其子类。
个人理解:Factory是简单工厂方法的改进,因为工厂方法将产品的实现交给了子类,而不需要在父类LoggerFactory更改代码,如if(A==OracleLogger)。现在只需要在子类中实现具体产品的创建就行了。
设计模式

3.Abstract Factory(抽象工厂)

定义:提供一个创建一系列相关或相互依赖对象的接口,而无须制定他们具体的类。
个人理解:下图中提供给用户SkinFactory,(抽象工厂,用于将抽象产品结合在一起)Button,TextField,ComboBox抽象的产品接口,(也就是你设计的东西有不同的产品)。SpringSkinFactory和SummerSkinFactory就是具体的工厂,客户可以选择我是要春天的界面风格还是夏天的界面风格。具体工厂中实现具体的产品,不同的具体工厂实现不同的产品。优点就是能把能够轻易的更换具体的产品类。比如我想实现冬天的界面风格,只需要创建一个WinterSkinFactory实现抽象工厂SkinFactory,并在WinterSkinFactory实WinterButton,WinterTextField,WinterComBox方法就行了。不需要去更改之前的代码。但如果你想在界面风格中增加另外一种抽象产品类就不行了,因为破坏了开闭原则,必须去修改SkinFactory中的方法来实现该抽象产品的创建。
设计模式
3种工厂模式的区别
引用:https://blog.****.net/jason0539/article/details/23020989
设计模式

4.Singleton 单例模式

定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
一.确保某一个类只能有一个实例,
二.它必须自行创建这实例
三.它必须自行向整个系统提供这个实例
引用:
https://blog.****.net/jason0539/article/details/23297037

5.Prototype原型模式

定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
优点: 使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。
使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单

其中有浅克隆和深克隆之分。相比之下浅克隆无法对引用类型 的成员变量进行复制。对引用类型操作的是同一内存地址。
设计模式

class Prototype implements Cloneable {
	public Prototype clone(){
		Prototype prototype = null;
		try{
			prototype = (Prototype)super.clone();
		}catch(CloneNotSupportedException e){
			e.printStackTrace();
		}
		return prototype; 
	}
}
 
class ConcretePrototype extends Prototype{
	public void show(){
		System.out.println("原型模式实现类");
	}
}
 
public class Client {
	public static void main(String[] args){
		ConcretePrototype cp = new ConcretePrototype();
		for(int i=0; i< 10; i++){
			ConcretePrototype clonecp = (ConcretePrototype)cp.clone();
			clonecp.show();
		}
	}
}

6.Build建造器模式

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
设计模式
在建造者模式中,客户端通过实例化指挥者类,指挥者类针对抽象建造者编程,客户端需要传入具体的建造者类型。指挥者知道具体的建造者一步一步构造一个完整的产品。
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。

2.结构型模式:处理类和对象的组合

1.Adapter pattern 适配器模

定义:将一个接口转换成客户希望的另一个接口,使接口不兼容的类可以一起工作,其别名叫包装器。适配器模式既可以作为类结构模式,也可以作为对象结构型模式。
分对象适配器(关联关系,频率高)和类适配器(继承和实现)

个人理解:以对象适配器为例:适配器模式通过适配器(Adapter)调用适配者(Adapteee)的方法来覆盖Targer中的方法。

设计模式

2.Bridge桥接模式

定义:将抽象部分和它的实现部分分离,使他们都可以独立地变化。
个人理解:Abstraction是抽象部分,RefinedAbstraction继承operation()方法,operation()方法通过对Implementor类的注入实现另外一个方法。
比如抽象部分实现了毛笔的大,中,小。Implementor则实现颜色。当我向新增加一个颜色的时候只需要新增一个类ConcreteImplementorC()就行了。
设计模式

3.行为型模式:对类或对象怎样交互和怎样分配职责进行描述。