设计模式
设计模式:
设计模式的核心在于提供相关问题的解决方案,使得人们可以更加简单方便地复用成功的设计和体系结构。
设计模式一般包含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.行为型模式:对类或对象怎样交互和怎样分配职责进行描述。