java中的几种常用设计模式
2018-03-05 10:21
465 查看
自己写的几个简单demo 加深理解
1.单例模式 饿汉式和懒汉式
注:
static静态方法在类创建的同时就会调用静态方法,不需要类的对象即可访问,直接用类名调用静态方法获取类的实例
private 私有描述类的构造函数,防止外界访问创建实例
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种
从实现方式来讲他们最大的区别就是懒汉式是延时加载,
他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,
饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例、所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。
懒汉式的优点是延时加载、缺点是应该用同步(想改进的话现在还是不可能,比如double-check)、可能会创建多个对象,违反了单例模式的规则,其实也可以不用同步、看你的需求了,多创建一两个无引用的废对象其实也没什么大不了。
2.工厂模式
接口类
两个实现类
工厂类
测试类
输出结果
注:工厂模式是一个类来专门管理对象的创建
工厂模式适用的一些场景(不仅限于以下场景):
1). 对象的创建过程/实例化准备工作很复杂,需要初始化很多参数、查询数据库等。
2).类本身有好多子类,这些类的创建过程在业务中容易发生改变,或者对类的调用容易发生改变。
3.代理模式
1.单例模式 饿汉式和懒汉式
//饿汉式 立即创建实例 public class Boy { private static Boy boy=new Boy(); private Boy(){ } public static Boy getBoy(){ return boy; } }
//懒汉式 需要时创建实例 public class Girl { private static Girl girl =null; private Girl(){ } public static Girl getGirl(){ if(girl==null){ return new Girl(); } return girl; } }
注:
static静态方法在类创建的同时就会调用静态方法,不需要类的对象即可访问,直接用类名调用静态方法获取类的实例
private 私有描述类的构造函数,防止外界访问创建实例
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种
从实现方式来讲他们最大的区别就是懒汉式是延时加载,
他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,
饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例、所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。
懒汉式的优点是延时加载、缺点是应该用同步(想改进的话现在还是不可能,比如double-check)、可能会创建多个对象,违反了单例模式的规则,其实也可以不用同步、看你的需求了,多创建一两个无引用的废对象其实也没什么大不了。
2.工厂模式
接口类
public interface Animal { }
两个实现类
public class Dog implements Animal{ public Dog() { System.out.println("我是Dog的实例"); } } public class Pig implements Animal{ public Pig() { System.out.println("我是pig的实例"); } }
工厂类
public class Factory { public Animal getInstance(String classname){ if("Pig".equals(classname)){ return new Pig(); } if("Dog".equals(classname)){ return new Dog(); } System.out.println("class not found"); return null; } }
测试类
public class Run { public static void main(String[] args) { Factory f1=new Factory(); f1.getInstance("Pig"); Factory f2=new Factory(); f2.getInstance("Dog"); Factory f3=new Factory(); f3.getInstance("Cat"); } }
输出结果
注:工厂模式是一个类来专门管理对象的创建
工厂模式适用的一些场景(不仅限于以下场景):
1). 对象的创建过程/实例化准备工作很复杂,需要初始化很多参数、查询数据库等。
2).类本身有好多子类,这些类的创建过程在业务中容易发生改变,或者对类的调用容易发生改变。
3.代理模式
相关文章推荐
- Java常用的几种设计模式
- Java中常用的几种设计模式
- java中几种常用的设计模式
- java几种常用设计模式简单示例
- java几种常用设计模式简单示例
- java几种常用设计模式简单示例
- 几种常用的Java设计模式
- 由浅入深,带你玩转几种常用java设计模式
- 由浅入深,带你玩转几种常用java设计模式
- java几种常用设计模式简单示例
- java几种常用设计模式简单示例
- java几种常用设计模式简单示例
- java几种常用设计模式简单示例
- Java的几种常用设计模式
- java几种常用设计模式简单示例
- java常用的几种设计模式
- java几种常用设计模式简单示例
- java中常用的几种设计模式
- Java常用的几种设计模式
- java中几种常用的设计模式及其实现