java代码设计模式

一、单例模式。

   懒汉模式:加synchronized修饰 就是线程安全的,不加就是线程不安全的。


 
public class SingleObj {
private SingleObj () {} /*私有化构造方法,在其它类中不能调用new StaZhang()创建SingleObj对象*/
 
private static SingleObj singleObj =null;
 
/*getStaticZhangObj()为外部类提供调用,来返回SingleObj 的一个实例*/
 
public static synchronized  SingleObj getStaticZhangObj() {
 
/* 判断是否为初次调用,如果是初次调用就实例化SingleObj对象,并返回*/
     if (singleObj ==null)
     {
            singleObj =new SingleObj ();
            return  singleObj ;
     }else
         return singleObj ;    
  }    
}
 

恶汉模式:static修饰的优先加载,所以也是线程安全的。


public class SingleObject {
    private SingleObject(){}/*构造函数私有化*/
    private static SingleObject singleObject=new SingleObject(); 
    public static SingleObject getSingleObject(){ /*提供外部调用方法*/
        return  singleObject;
    }
}

二、工厂模式。

 简单工厂模式:

必须创建一个共同实现的接口(生产车间接口)

/*生产车间接口*/
public interface WorkShop {
    /*生产方法*/
    public void product();
}

创建汽车生产车间类 实现 生产车间接口

public class CarworkShopImple implements WorkShop {
    @Override
    public void product() {
        System.out.println("生产汽车。。。");
    }
}
创建自行车生产车间类实现 生产创建接口
public class BikeworkShopImple implements WorkShop {

    @Override
    public void product() {
        System.out.println("生产自行车。。。");
    }

创建工厂类 根据getVehicle方法参数 匹配类 ,返回该实例对象,注意方法的返回值类型是父类接口类型

public class FactoryUtil {

    public WorkShop getVehicle(String name){
        if (name==null)
            return null;
        else if (("car").equals(name))
            return new CarworkShopImple();
        else  if (("bike").equals(name))
            return new BikeworkShopImple();
        else
            return  null;
    }
}

调用

@Test
public void test2(){

FactoryUtil factoryUtil=new FactoryUtil();
WorkShop bike=factoryUtil.getVehicle("bike");
bike.product();
WorkShop car=factoryUtil.getVehicle("car");
car.product();

}

抽象工厂模式:

 

三、代理模式。

静态代理:

步骤一、必须创建接口

public interface Animal {
    public String eat(String food);
}

步骤二、创建接口实现类

public class Dog implements Animal {
    @Override
    public String eat(String food) {
        return "狗吃"+food;
    }
}

 

步骤三、创建目标类的代理类

public class DogProxy implements Animal{
    private Dog dog;
    public DogProxy(Dog dog) {
        this.dog=dog;
    }

    @Override
    public String eat(String food) {
        System.out.println("扩展操作");
        return dog.eat(food);
    }
}

步骤四、调用

        Animal animal=new DogProxy(new Dog());
        String str=animal.eat("骨头");
        System.out.println(str);

动态代理:

步骤一、首先必须定义接口

public interface Animal {
    public String eat(String food);
}

步骤二、定义接口的实现类(目标类)
 

public class Dog implements Animal {
    @Override
    public String eat(String food) {
        return "狗吃"+food;
    }

}

步骤三、实现InvocationHandler实现类并实现构造方法初始化。(和静态代理的区别 就在于Object 类型参数)

public class MyInvocationHandler implements InvocationHandler {
    /*创建目标对象*/
    private Object target;
    public MyInvocationHandler(Object target) {
        this.target=target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("扩展开始*****");
        System.out.println("扩展结束*****");
        
        
         /*相当于定义eat()方法*/
        return method.invoke(target,args); 
    }
}

步骤四、调用Proxy.newProxyInstance()生成代理类对象。

/*目标对象*/
Dog dog = new Dog();

/*调用函数对象*/
MyInvocationHandler myInvocationHandler=new MyInvocationHandler(dog);

/*Proxy.newProxyInstance()生成的是Animal接口的实现类
	和目标类Dog是兄弟关系。
*/
Animal animal = (Animal) Proxy.newProxyInstance
        (
                dog.getClass().getClassLoader(),

                dog.getClass().getInterfaces(),
    
                myInvocationHandler


        );/*创建Dog代理对象*/
String foodDog = animal.eat("骨头");
System.out.println(foodDog);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于struts网上书店 JSP+Access论坛 网络招标信息管理系统 sql2000网络教学平台 mySQL超市管理系统 超市管理系统 教学管理系统 基于网络环境的选课系统 学生信息管理系统 新闻系统 新闻文章发布系统 考试系统 网络教学系统 网上书店系统 问卷管理... www.yateshi.com/service/13519.html 21K 2009-4-8 - 百度快照 求职java方向的web开发! - 程序员/软件工程师 - 58.com 2.熟悉STRUTS结构、MVC的开发;熟练Hibernate数据库持久层的开发及Spring。 3.能熟练应用多种JAVA应用服务器(Tomcat ,...武汉星星超市管理系统(2007-10-2007-12) 项目描述:对超市的货物、员工、财务进行管理 职责:模块开发,系统设计,数据... bj.58.com/tech/35220795x.shtml 11K 2009-2-13 - 百度快照 源码下载列表 - 纽纶网 | Nulung.com 600G IT资料,文档,书籍,... 1568_fjswpic12人气:超市管理系统\\数据库脚本和数据库备份超市管理系统\\数据库脚本和数据库备份-Supermarket ...所属分类:发布日期:2008-10-13文件大小:3845697提供者:StrutsNETBOOK6人气:一款网上书店的J2EE代码,采用STRUTS技术 ... www.dssz.net/100304-size-asc/1249.html 15K 2009-4-21 - 百度快照 新东方一搏职业培训学校 开发基于桌面的J2SE应用系统;(...2、MVC模式、Struts框架 3、...系统分析师。主要研究方向为软件项目管理、软件产品生命...曾主持参与铁路系统多个大型项目设计与开发,如全国铁路货车大修财务清算系统、车号标签自动识别系统、货车检修成本管理... www.hrbrcw.com/job/1920.aspx?jid=5165 53K 2009-4-22 - 百度快照

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值