工厂方法模式
- 工厂模式,数据类创建模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂负责创建具体的产品对象。
- 目的:为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个具体产品对象。
- 工厂方法模式包含四个部分
- 抽象产品L产品对象同一基类,或者同一接口
- 具体的产品:各个不同实例对象类
- 抽象工厂:所有子类工厂类的基类,或者同一接口
- 具体的工厂子类,负责每个不同产品对象的实际创建
//具体工厂子类
public class HumanFactory extends AbsHumanFactory {
@SuppressWarnings("unchecked")
@Override
public <T extends Human> T createHumen(Class<T> tClass) {
Human humen=null;
try {
humen= (T) Class.forName(tClass.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return (T)humen;
}
}
//具体的实现类
//黑种人
public class BlackHuman implements Human {
@Override
public void getColor() {
System.out.println("黑色人种");
}
}
//白种人
public class WhiteHuman implements Human {
@Override
public void getColor() {
System.out.println("白色人种");
}
}
//黄种人
public class YellowHuman implements Human {
@Override
public void getColor() {
System.out.println("黄色人种");
}
}
//抽象工厂
public abstract class AbsHumanFactory {
public abstract <T extends Human> T createHumen(Class<T> tClass);
}
单例模式
Singleton的静态属性instance中,只有instance为null的时候才创建一个实例,构造函数私有,确保每次都只创建一个,避免重复创建
public class Singleton {
/**
* 防止外部创建实例 私有
* Singleton.
*/
private Singleton() {
}
/**
* 唯一实例
* 内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。
* https://www.cnblogs.com/chengxiao/p/6528109.html
*/
private static volatile Singleton mInstance;
public static Singleton getInstance() {
if (mInstance == null) {//第一个锁,如果没有实例
/**
* 第二个锁,如果没有任何线程创建Singleton实例 对象锁 - 若多个线程拥有同一个MyObject类的对象,则这些方法只能以同步的方式执行
* https://www.cnblogs.com/hapjin/p/5452663.html
*/
synchronized (Singleton.class) {
if (mInstance == null) {
mInstance = new Singleton();
}
}
}
return mInstance;
}
public static void main(String[] args) {
System.out.println(mInstance);
}
}
建造者模式
-
建造者模式,顾名思义的就是类似建房子,有一个固定的流程。
在大话设计模式中,作者举了一个例子大概意思是同一道菜在中国的每一个地方都有不同的味道
而肯德基的鸡腿、汉堡在每一个城市都是一样的味道。
我觉的这一个例子可以清楚的认识到建造者模式有一个固定的建造过程。
建造者模式实现了依赖倒转原则,抽象不应该依赖细节,细节应该依赖与抽象。
建造者模式的定义是:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。 -
建造者模式的角色定义,在建造者模式中存在以下4个角色:
- builder:为创建一个产品对象的各个部件指定抽象接口
- ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口
- Director:构造一个使用Builder接口的对象
- Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,
包含定义组成部件的类,包括将这些部件装配成最终产品的接口