1.简单工厂模式
角色:
抽象产品类
具体产品类
工厂类
每当增加一个新产品时,需要修改工厂类代码。根据传入的参数,决定创建对应的子类实例。
public class FoodFactory {
public static Food makeFood(String name) {
if (name.equals("noodle")) {
Food noodle = new LanZhouNoodle();
noodle.addSpicy("more");
return noodle;
} else if (name.equals("chicken")) {
Food chicken = new HuangMenChicken();
chicken.addCondiment("potato");
return chicken;
} else {
return null;
}
}
}
2.工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
角色:
抽象工厂
具体工厂
抽象产品
具体产品
工厂方法模式与简单工厂模式的区别:
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。但是每当增加一个新产品时,需要修改原有的工厂类,违反了“开闭原则”。
3.抽象工厂模式
抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
抽象工厂的优点与缺点:
优点:
1.最大的好处是易于交换产品序列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
2.它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
缺点:
增加一个新产品,需要改动多个工厂类
需要在每个客户端都创建对象,当有多个客户端时,需要做大量改动。
改进:用反射+配置文件+抽象工厂的数据访问程序
4.单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
具体实现方式见下方链接:
单例模式的6种实现方式
5.建造者模式
建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
角色:
指挥者
抽象建造者
具体建造者
产品类
什么时候用建造者模式?
主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
所以说,建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式。
6.原型模式
原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
角色:
原型类:声明一个克隆自身的接口。
具体原型类:实现一个克隆自身的操作。
浅复制与深复制:
见链接:java中的深拷贝与浅拷贝
创建型模式总结:
创建型模式抽象了实例化的过程,他们帮助一个系统独立于如何创建、组合和表示它的那些对象。