-----------------------------------------------------------------------------------------------------------
单例设计模式:
饿汉:直接创建实例对象,不管你是否需要这个对象。
/*1.直接实例化:构造器私有化,自行创建实例化并静态变量保存,public向外提供这个实例*/
public class Singleton1{
public static final Singleton1 INSTANCE = New Singleton1();
private Singleton1(){}
}
/*2.枚举式:枚举类型,表示该类型的对象是有限的几个,限制为一个则成为单例*/
public enum Singleton2{
INSTANCE
}
/**/
main(){
Singleton1 s = Singleton1.INSTANCE;
}
懒汉式:延迟加载实例对象
/*静态变量保存实例,提供静态方法给外界获取该实例
线程安全问题,需加同步锁*/
public class Singleton3{
private static Singleton3 instance;
private Singleton3(){}
public static Singleton3 getInstance(){
if(instance == null){ /*优化,已经创建的不需要等待锁*/
synchronized(Singleton3.class){
if(instance == null){
/*try{
Thread.sleep(100);
}catch(InputerruptedException e){
}*/
instance = new Singleton3();
}
}
}
return instance;
}
}
/*内部类方式: 内部类不会自动随外部类加载/初始化而初始化,内部类被加载/初始化才创建实例*/
public class Singleton4{
private Singleton4(){}
private static class Inner{
private static final Singleton4 INSTANCE;
}
public static Singleton4 getInstance(){
return Inner.INSTANCE;
}
}
--------------------------------------------------------------------------------------------------------------------
策略模式:
优点: 快速替换继承关系,减少ifelse等判断
缺点: 造成很多策略类,策略类对外暴露.
意图: 算法一个个封装可以互相替换(需要实现同一个接口)
场景: 旅游出行->选择自行车,汽车,飞机等每一种出行方式为一个策略
//算法的策略接口
public interface IStrategy {
public int doOperaction(int num1,int num2);
}
//实现的方法(+)
public class OperactionAdd implements IStrategy{
public int doOperaction(int num1, int num2) {
return num1 + num2;
}
}
//实现的方法(-)
public class OperactionMultiply implements IStrategy{
public int doOperaction(int num1, int num2) {
return num1 - num2;
}
}
//Context来改变和组合Strategy对象
public class Context {
private IStrategy iStrategy;
public Context(IStrategy iStrategy){
this.iStrategy = iStrategy;
}
public int executeStrategy(int num1,int num2){
return iStrategy.doOperaction(num1, num2);
}
}
//测试,Context类运行过程中由于条件的改变而改变
@Test
public void testStrategyAdd(){
Context context = new Context(new OperactionAdd());
System.out.println("num1 + num2 = " + context.executeStrategy(1, 2));
//打印 num1 + num2 = 3
}
--------------------------------------------------------------------------------------------------------------------
模式:
优点: