java中的几种常用设计模式

自己写的几个简单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.代理模式 未完…..

--END--


 点赞  打赏
  • 暂无评论