本文转载自:来自阿里Java架构师的十三份设计模式笔记
一、单例模式
定义:
确保一个类只有一个实例,并提供一个全局访问点。
类图:
源代码:
public class Singleton {
private static Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance() {
if(instance == null){
synchronized (Singleton.class) {
instance = new Singleton();
}
}
return instance;
}
}
二、工厂模式
定义:工厂模式定义了一个创建对象的接口,由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
2.1 简单工厂模式
类图:
源代码:
public abstract class Product {
public void method1() {
}
public void method2() {
}
}
public class Product_A extends Product{
public Product_A() {
}
public void method1() {
System.out.println("this is method1 in Product_A");
}
public void method2() {
System.out.println("this is method2 in Product_A");
}
}
public class Product_B extends Product{
public Product_B() {
}
public void method1() {
System.out.println("this is method1 in Product_B");
}
public void method2() {
System.out.println("this is method2 in Product_B");
}
}
public class Singleton {
private static Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance() {
if(instance == null){
synchronized (Singleton.class) {
instance = new Singleton();
}
}
return instance;
}
}
2.2 抽象工厂模式
类图:
源代码:
public interface Product {
public void method1();
public void method2();
}
public class Product_A implements Product {
@Override
public void method1() {
System.out.println("this is method1 in Product_A");
}
@Override
public void method2() {
System.out.println("this is method2 in Product_A");
}
}
public class Product_B implements Product {
@Override
public void method1() {
System.out.println("this is method1 in Product_B");
}
@Override
public void method2() {
System.out.println("this is method2 in Product_B");
}
}
public interface AbstractFactory {
public Product getProduct();
}
public class Product_A_Factoty implements AbstractFactory {
@Override
public Product getProduct() {
return new Product_A();
}
}
public class Product_B_Factory implements AbstractFactory {
@Override
public Product getProduct() {
return new Product_B();
}
}
三、策略模式
定义:策略模式定义了算法族,分别将其封装起