java设计模式之单例模式和简单工厂模式

深度探讨java设计模式

一、单例模式

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

代码:

// An highlighted block
/**
 * 第一种:单例模式
 */
public class demo01 {
    private static demo01 d = null;
    private demo01(){}

    public static demo01 getExample(){
        int j = 1;
        if (d==null){
            System.out.println("第一次实例化");
            System.out.println("这个类只能有一次实例化");
            d=new demo01();
        }else {
            j =j+1;
            System.out.println("这是第j次实例化");
            System.out.println("此次实例化将默认第一次");
        }
        return d;
    }

测试

public class Test {
    public static void main(String[] args) {
        demo01 d1 = demo01.getExample();
        demo01 d2 = demo01.getExample();
        System.out.println("判断两次实例是否一样"+(d1 ==d2));
    }
}
//结果:第一次实例化
//这个类只能有一次实例化
//这是第j次实例化
//此次实例化将默认第一次
//判断两次实例是否一样true

二、简单工厂模式

简单工厂模式(Simple Factory Pattern)因为内部使用静态方法根据不同参数构造不同产品对象实例,也称静态工厂方法模式。
在简单工厂模式中,可以根据参数的不同返回不同实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的
实例通常都具有共同的父类。
/**
 * 操作工厂类
 * @author spring
 */
class OperationFactory {
    /**
     * 
     * @param operate 根据传进来的操作符,选择实例化响应的对象
     * @return
     */
    public static Operation createOperate(String operate){
        Operation oper = null;
        switch(operate){
            case "+":
                oper = new OperationAdd();
                break;
            case "-":
                oper = new OperationSub();
                break;
            case "*":
                oper = new OperationMul();
                break;
            case "/":
                oper = new OperationDiv();
                break;
        }
        return oper;
    }
}

/**
 * 操作抽象类,各种算数操作需要继承此类,并实现getResult方法
 */
public abstract class Operation {
    abstract Integer getResult(int a, int b);
}

class OperationAdd extends Operation {
    @Override
    Integer getResult(int a, int b) {
        return a+b;
    }
}

class OperationSub extends Operation {
    @Override
    Integer getResult(int a, int b) {
        return a-b;
    }
}

class OperationMul extends Operation {
    @Override
    Integer getResult(int a, int b) {
        return a*b;
    }
}

class OperationDiv extends Operation {
    @Override
    Integer getResult(int a, int b) {
        return a/b;
    }
}

/**
 * 测试操作不再赘述
 */
public static void main(String[] args) {
        Operation oper = OperationFactory.createOperate("+");
        oper.getResult(10, 5);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值