ruijiege

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

单列模式

功能:只能创建一个对象的实列

懒汉:会出现线程安全问题,但是不浪费内存空间

package cn.jiedada.singleton;

public class Lazy {
    private Lazy(){}
    private static Lazy instance;
    public static Lazy getLazy(){
        if(instance==null){
            //同步代码块
            synchronized (Lazy.class) {
                if(instance==null){
                    return instance=new Lazy();
                }
            }
        }
        return instance;
    }
}
View Code

 

 

饿汉:不会线程不安全,但是会浪费内存

package cn.jiedada.singleton;

public class Hungry {
    private Hungry(){}
    private static Hungry instance;
    //优化
    static{
        instance=new Hungry();
        //可以写入我们想做的操作
    }
    public static Hungry getHungry(){
        return instance;
    }
}
View Code

 

 

 

 

工厂模式

先创建一个工厂类,然后子类继承工厂方法,在创建一个判断创建什么工厂

public abstract class Refrigerator {
    abstract void createRefrigerator();
}
public class Hisense extends Refrigerator{
    @Override
    void createRefrigerator(){
        System.out.println("这是海信冰箱");
    }
}
public class Haier extends Refrigerator{
    @Override
    void createRefrigerator(){
        System.out.println("这是海尔冰箱");
    }
}
public class RefrigeratorFactroy {
    public Refrigerator createRefrigerator(int num) {
        if(num==1){
            return new Haier();
        }else{
            return new Hisense();
        }
    }
}
View Code

 

适配器模式

package cn.jiedada.adapter;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        WineAdapter wineAdapter = new WineAdapter(new Tea());
        wineAdapter.dreak();
    }

}
class Wine{
    public void dreak(){
        System.out.println("喝酒");
    }
}
class Tea{
    public void dreak(){
        System.out.println("喝茶");
    }
}
class WineAdapter extends Wine{
    Tea tea;
    public WineAdapter(Tea tea) {
        this.tea=tea;
    }
    public void dreak(){
        tea.dreak();
    }
}
View Code

 

装饰器

package cn.jiedada.decorate;

/**装饰者模式,通过不继承的方式获得其他的方法或者字段来自己使用
 * 创建一个构造方法来传入想要使用类的对象,这样就可以调用该类了;
 * 而不是在被装饰的类中直接new一个对象,这样浪费内存
 * @author 杰大大是真滴帅
 *
 */
public class Test {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        B b = new B(new A());
        b.read();
    }

}
class A {
    public void decorate(){
        System.out.println("这是一朵美丽的花城市");
    }
}
class B{
    A a;
    public B(A a) {
        this.a=a;
    }
    public void read(){
        a.decorate();
        System.out.println("我在这里读书");
    }
}
View Code

 

posted on 2019-08-06 09:11  哦哟这个怎么搞  阅读(117)  评论(0编辑  收藏  举报