定义
代码
/**
* 单例模式-饿汉形式
* @author emma_zhang
* @date 2019/2/15
*/
public class SingletonForHunger {
private static final SingletonForHunger SINGLETON_FOR_HUNGER = new SingletonForHunger();
private SingletonForHunger() {
// 限制产生多个实例
}
/**
* 访问实例
*/
public static SingletonForHunger getSingletonForHunger() {
return SINGLETON_FOR_HUNGER;
}
public static void doSomething() {
// 其他方法,尽量使用static
}
}
/**
* 单例模式-懒汉形式
*
* @author emma_zhang
* @date 2019/2/15
*/
public class SingletonForLazy {
private static SingletonForLazy singletonForLazy = null;
private SingletonForLazy() {
// 限制产生多个对象
}
/**
* 产生实例对象,必须要加同步,不然在多线程下可能出错
*
* @return 实例对象
*/
public synchronized static SingletonForLazy getSingletonForLazy() {
if (singletonForLazy == null) {
singletonForLazy = new SingletonForLazy();
}
return singletonForLazy;
}
}
使用场景
定义
通用源码
/**
* 抽象产品类
* @author emma_zhang
* @date 2019/2/18
*/
public abstract class Product {
/**
* 产品的公共方法
*/
public void method(){
}
/**
* 抽象方法
*/
public abstract void method2();
}
/**
* 具体产品类
*
* @author emma_zhang
* @date 2019/2/18
*/
public class ConcreteProduct1 extends Product {
@Override
public void method2() {
}
}
/**
* 抽象工厂类
*
* @author emma_zhang
* @date 2019/2/18
*/
public abstract class Creator {
/**
* 输入参数可以自行匹配,通常为string,enum,class等
*
* @param c
* @param <T>
* @return
*/
public abstract <T extends Product> T createProduct(Class<T> c);
}
/**
* 具体工厂类
*
* @author emma_zhang
* @date 2019/2/18
*/
public class ConcreteCreator extends Creator {
@Override
public <T extends Product> T createProduct(Class<T> c) {
Product product = null;
try {
product = (Product)Class.forName(c.getName()).newInstance();
} catch (Exception e) {
// 处理异常
e.printStackTrace();
}
return (T)product;
}
}
/**
* 场景类
*
* @author emma_zhang
* @date 2019/2/18
*/
public class Client {
public static void main(String[] args) {
Creator creator = new ConcreteCreator();
Product product = creator.createProduct(ConcreteProduct1.class);
// 继续业务处理
}
}
应用场景
扩展
定义
通用源码
/**
* 抽象产品类
*
* @author emma_zhang
* @date 2019/2/19
*/
public abstract class AbstractProductA {
public void sharedMethod() {
// 每个产品共有的方法
}
/**
* 共有的方法,但不同的实现
*/
public abstract void doSomething();
}
/**
* 产品A1的实现类
*
* @author emma_zhang
* @date 2019/2/19
*/
public class ProductA1 extends AbstractProductA {
@Override
public void doSomething() {
System.out.println("产品A1的实现方法");
}
}
/**
* 产品A2的实现类
*
* @author emma_zhang
* @date 2019/2/19
*/
public class ProductA2 extends AbstractProductA {
@Override
public void doSomething() {
System.out.println("产品A2的实现类");
}
}
/**
* 抽象产品类
*
* @author emma_zhang
* @date 2019/2/19
*/
public abstract class AbstractProductB {
public void sharedMethod() {
// 每个产品共有的方法
}
/**
* 共有的方法,但不同的实现
*/
public abstract void doSomething();
}
/**
* 产品B1的实现类
*
* @author emma_zhang
* @date 2019/2/19
*/
public class ProductB1 extends AbstractProductB {
@Override
public void doSomething() {
System.out.println("产品B1的实现方法");
}
}
/**
* 产品B2的实现类
*
* @author emma_zhang
* @date 2019/2/19
*/
public class ProductB2 extends AbstractProductB {
@Override
public void doSomething() {
System.out.println("产品B2的实现类");
}
}
/**
* 抽象工厂
*
* @author emma_zhang
* @date 2019/2/19
*/
public abstract class AbstractCreator {
/**
* 构建产品A
*
* @return 产品A
*/
public abstract AbstractProductA createProductA();
/**
* 构建产品B
*
* @return 产品B
*/
public abstract AbstractProductB createProductB();
}
/**
* 产品等级1的实现
*
* @author emma_zhan
* @date 2019/2/19
*/
public class Creator1 extends AbstractCreator {
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
/**
* 产品等级2的实现
*
* @author emma_zhang
* @date 2019/2/19
*/
public class Creator2 extends AbstractCreator {
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
/**
* 场景类
*
* @author emma_zhang
* @date 2019/2/19
*/
public class Client {
public static void main(String[] args) {
AbstractCreator creator1 = new Creator1();
AbstractCreator creator2 = new Creator2();
AbstractProductA a1 = creator1.createProductA();
AbstractProductA a2 = creator2.createProductA();
AbstractProductB b1 = creator1.createProductB();
AbstractProductB b2 = creator2.createProductB();
// 业务逻辑从这里开始。。。。
}
}
优点
缺点
定义
通用源码
/**
* 产品类-实现模板方法模式
*
* @author duogui.zq
* @date 2019/2/21
*/
public class Product {
public void doSomething() {
// 独立业务逻辑
}
}
/**
* 抽象建造者-规范产品的组建
*
* @author duogui.zq
* @date 2019/2/21
*/
public abstract class Builder {
/**
* 设置产品的不同部分,已获得不同的产品
*/
public abstract void setPart();
/**
* 建造产品
*
* @return
*/
public abstract Product buildProduct();
}
/**
* 建造者 有多少个产品就有多少个建造者,这些产品类具有相同的接口或者抽象类
*
* @author duogui.zq
* @date 2019/2/21
*/
public class ConcreteProduct extends Builder {
private Product product = new Product();
@Override
public void setPart() {
}
@Override
public Product buildProduct() {
return product;
}
}
/**
* 导演类
*
* @author duogui.zq
* @date 2019/2/21
*/
public class Director {
private Builder builder = new ConcreteProduct();
public Product getProduct() {
builder.setPart();
/**
* 设置不同的零件,产生不同的产品
*/
return builder.buildProduct();
}
}
定义
通用源码:
/**
* 原型模式
*
* @author emma_zhang
* @date 2019/2/26
*/
public class PrototyprClass implements Cloneable {
@Override
public PrototyprClass clone() {
PrototyprClass prototyprClass = null;
try {
//
prototyprClass = (PrototyprClass) super.clone();
}catch (CloneNotSupportedException e) {
// 异常处理
}
return prototyprClass;
}
}
使用场景
注意事项
深拷贝和浅拷贝
深拷贝的实例
/**
* 深拷贝
*
* @author emma_zhang
* @date 2019/2/26
*/
public class DeepClone implements Cloneable {
private ArrayList<String> list = new ArrayList<>();
@Override
public DeepClone clone() {
DeepClone deepClone = null;
try {
deepClone = (DeepClone)super.clone();
deepClone.list = (ArrayList<String>)this.list.clone();
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
return deepClone;
}
}
原文:https://www.cnblogs.com/Gabby/p/10500073.html