java基础----常用设计模式
来源:互联网 发布:linux mysql 远程连接 编辑:程序博客网 时间:2024/05/17 01:00
单例设计模式
- 饿汉式:线程安全,因为事先new Single()实例化对象了,不会有访问冲突发生,但是效率低
public class Single { private static Single single = new Single();//实例私有化,只能通过下面方法获得 private Single(){//构造私有化 } public static Single getInstance(){ return single; }}
- 懒汉式:效率高,但是线程不安全,假设两个异步线程同时进入getInstance方法,都会创建新的Single对象
public class Single { private static Single single = null; private Single(){ } public static Single getInstance(){ if(single==null){ single = new Single(); } return single; }}
- 懒汉式(即安全也效率高)
public class Single { private static Single single = null; private Single() { } public static Single getInstance() { if (single == null) { synchronized (Single.class) {//同步块,防止访问冲突 if (single == null) { single = new Single(); } } } return single; }}
PS:解释下为什么同步块里还要判断single 是否为空,假设两个线程AB都在执行到同步块那里去,然后A进去了,B在外面等着,如果没有判空的话,A创建了Single实例,出来后,B可以进去了,B又创建了Single实例,造成对象Single过多,所以要判空
工厂设计模式
简单工厂:由三部分组成
- 具体工厂类:以具体工厂类为核心,定义返回抽象产品的方法,接受参数进行逻辑判定,判定用户想要哪个产品
public class CarFactory { public static Car getCar(String Tag){ switch (Tag){ case "BMW": return new BMW(); case "AuDi": return new AuDi(); } return null; }}
- 抽象产品类:产品的基类,降低耦合
public abstract class Car { //具体逻辑方法}
- 具体产品类:继承抽象产品,重写属于自己的方法
public class BMW extends Car { //具体逻辑方法}public class AuDi extends Car { //具体逻辑方法}
工厂方法:简单工厂的进一步改善,四部分组成
- 抽象工厂:以抽象工厂为核心,定义返回抽象产品的方法
public abstract class CarFactory { public abstract Car getCar();}
- 具体工厂:继承抽象工厂,重写方法,返回具体的产品实例
public class BmwFactory extends CarFactory { @Override public Car getCar() { return new BMW(); }}public class AuDiFactory extends CarFactory { @Override public Car getCar() { return new AuDi(); }}
- 抽象产品:产品的基类,降低耦合
public abstract class Car { //具体逻辑方法}
- 具体产品:继承抽象产品,重写属于自己的方法
public class BMW extends Car { //具体逻辑方法}public class AuDi extends Car { //具体逻辑方法}
Build模式
- 创建静态内部类Builder,成员变量和外部类一样,Builder有一系列对变量赋值,最后有个Build(Builder build)方法,把build的变量赋给外部类的成员变量
- 保证了实例化复杂对象的一致性和灵活性,也适合用在使用方法顺序不同会产生不同结果的场合
简单例子:
0 0
- java基础----常用设计模式
- java常用设计模式
- java常用设计模式
- Java常用设计模式
- java常用设计模式
- java常用设计模式
- java常用设计模式 .
- java常用设计模式
- java常用设计模式
- java常用设计模式
- java 常用设计模式
- java常用设计模式
- Java常用设计模式
- java常用设计模式
- java常用设计模式
- java常用设计模式
- java常用设计模式
- java常用设计模式
- HDU1799 循环多少次?
- 微信分享 JSSDK的使用
- 三句代码创建全屏Dialog或者DialogFragment:带你从源码角度实现
- svn安装后,checkout到本地的文件夹不能正确显示图标(如绿色勾),解决过程
- UITableView使用总结和性能优化
- java基础----常用设计模式
- centos7 samb4
- STL源码剖析笔记-6算法(6.1,6.2)
- make: ***No rule to make target 'include/layers/python_layer.hpp, needed by 'python/caffe/_caffe.so'
- Java正则表达式判断是否为手机号码
- 本机运用vmware和centos搭建linux服务器
- spring mybatis解决application.properties注入变量问题
- R语言广义线性模型
- 网络判断工具类