单列模式
功能:只能创建一个对象的实列
懒汉:会出现线程安全问题,但是不浪费内存空间
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; } }
饿汉:不会线程不安全,但是会浪费内存
package cn.jiedada.singleton; public class Hungry { private Hungry(){} private static Hungry instance; //优化 static{ instance=new Hungry(); //可以写入我们想做的操作 } public static Hungry getHungry(){ return instance; } }
工厂模式
先创建一个工厂类,然后子类继承工厂方法,在创建一个判断创建什么工厂
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(); } } }
适配器模式
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(); } }
装饰器
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("我在这里读书"); } }