J2EE与设计模式

设计模式并非软件行业所独有,而是起源于建筑行业,我们常说的设计模式主要有23种,不过最常用的几种模式有以下几个:

1,单例模式:确保一个类在内存中只拥有一个实例,以保证对象唯一性!实现单例模式的步骤很简单:

1.1构造函数私有化。

1.2在该类中自己实例化一个对象

1.3提供一个共有的方法来供外界程序访问该对象

代码如下:

public class Student{

private Student(){

}

private static Student student = null;                      //懒汉式单例:在方法被调用时实例化对象

public static Student getInstance(){

if(student == null){

return new Student();

}

return student;

}

}


也可以这样写:

private static final Stuent student = new Student();           //饿汉式,在类被加载时自动实例化

public static Student getInstance(){

return student;

}




2,简单工厂模式:当有多个类都实现了同一个接口或父类时,可以使用工厂类来实例化对象

既然是工厂模式,那么肯定有工厂类,该类的作用就是根据传入不同的参数来实例化对象。

工厂类一般都提供一个返回值为 static并且返回类型为父类或父接口,至于为什么要这样,原因很简单,因为这就是面向对象三大特性中的 多态原理,

父类引用指向子类对象!


package com.factory;

import  java.util.Scanner;

interface Fruit{

public void grow();       //生长

public void pick();        //采摘 

}


class Apple implements Fruit{

public void grow(){

System.out.println("苹果在生长。。");

}

  public void pick(){

System.out.println("摘苹果。。");

}

}


class Orange implements Fruit{

public void grow(){

System.out.println("橘子在生长。。");

}

public void pick(){

System.out.println("摘桔子。。");

}

}


class Factory{

public static Fruit  getFruitInstance(String type){

Fruit fruit = null;

if(type.equals("Apple")){

fruit = new Apple();

}else if(type.equals("Orange")){

fruit = new Orange();

}else{

System.out.println("NullPointException!");

return null;

}

}

}


public class Test{

public static void main(String [] args){

System.out.print("请输入水果类型:");

Scanner input = new Scanner(System.in);

Fruit fruit  = Fruit.getFruitInstance(input.next);

if( null != fruit){

fruit.grow();

fruit.pick();

}else{

System.out.println("无法找到该类型。。");

}

}

}


至此一个完整的简单工厂模式就完成了,不过仔细发现该工厂类还存在以下问题:

如果要加入新的功能,比如我现在要再加入一个水果类,Banana(香蕉),则该工厂类又要修改代码,这样违背了开闭原则,那么如何解决这个问题呢,请看下面:


class Factory{

Fruit fruit = null;

try{

  fruit =(Fruit) Class.forName("com.factory."+type).newInstance();     

}catch(Exception e){

}

return fruit;

}

Class 类提供了一个forName().newInstance()方法,该方法可以根据包名+类名自动实例化对象!

经过改进工厂类的代码,不论加入什么样的类,工厂类都无须改变,这样加实现了 开闭原则,对修改关闭,对增加开放!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值