您的位置:首页 > 编程语言 > Java开发

java中的几种常用设计模式

2018-03-05 10:21 465 查看
自己写的几个简单demo 加深理解

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.代理模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: