原标题:Java中的单态模式和简单工厂模式
为了更好的帮助大家便利的学习java 这门编程语言,和更好的巩固java语言学习中的基础知识,我们特意为大家精心制作了java程序设计精编教程。
本教程精选java 核心内容,结合实例,循序渐进的向大家介绍Java语言。以零基础讲解为基础,用实例引导大家学习,深入浅出的向大家介绍java的相关知识和实战技能。
Java 入门(48)
JAVA 相关的开发,都不可避免的要用到抽象和封装,这是JAVA的一个特点,同时也是每个开发者必须掌握的,JAVA是这样,Android更是如此。而设计模式就是告诉我们应该如何写出高效且更具应用性和拓展性的代码.
单例设计模式[ 单态模式]
单例设计模式的一般定义:一个类中只允许有一个实例[ 对象]。
实现思路:让类的构造方法私有化,同时提供一个静态方法去实例化这个类。
单例模式有两种写法,懒汉写法和饿汉写法。
懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要)
package demo_singleton;
/* 懒汉式的单例模式,有线程安全问题,当多线程访问的时候,会出现多个实例*/
public class SingletonLazy {
private static SingletonLazy instance = null;
public static SingletonLazy getInstance {
if (instance == null) {
instance = new SingletonLazy;
}
return instance;
}
private SingletonLazy {
}
}
饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)
package demo_singleton;
public class SingletonHungry {
private static SingletonHungry singletonhunary = new SingletonHungry;
public static SingletonHungry getinstance {
return singletonhunary;
}
private SingletonHungry {
}
}
运行速度:饿汉式比懒汉式速度快。
空间利用率:懒汉式比饿汉式更节省空间
简单工厂设计模式
简单工厂设计模式的一般定义:简单工厂又叫静态工厂,由一个工厂对象决定创建哪一个产品对象。
实现思路:写一个类,让他制造出我们想要的对象。
抽象产品角色,工厂角色,具体产品角色
例如:有一个农场负责生产各种水果,有苹果,有草莓,有葡萄。
农场---- 工厂角色【java类】
水果--- 抽象产品角色【抽象类/接口】
苹果,草莓,葡萄---- 具体产品角【java类与抽象产品角色有继承/实现关系】
使用场合:
1.需要创建大量的对象时
2.在修改某一处的时候,可能会牵动很多其他部分的修改【牵一发,动全身】
实例: 有一个农场负责生产各种水果,有苹果,有草莓,有葡萄。
package com.click369.test2;
/**
* 水果接口--抽象产品角色
* @author Administrator
*
*/
public interface ShuiGuo {
public void eat;
}
package com.click369.test2;
/**
* 葡萄类--具体产品角
* 抽象产品角色有继承/实现关系
* @author Administrator
*
*/
public class PuTao implements ShuiGuo{
@Override
public void eat {
System.out.println(" 我吃的是葡萄");
}
}
package com.click369.test2;
/**
* 草莓类--具体产品角
* 抽象产品角色有继承/实现关系
* @author Administrator
*
*/
public class CaoMei implements ShuiGuo{
@Override
public void eat {
System.out.println(" 我吃的是草莓");
}
}
package com.click369.test2;
/**
* 苹果类--具体产品角
* 抽象产品角色有继承/实现关系
* @author Administrator
*
*/
public class PingGuo implements ShuiGuo{
@Override
public void eat {
System.out.println(" 我吃的是苹果");
}
}
package com.click369.test2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
/**
* 农场类--工厂角色
* 生产各种水果【苹果,草莓,葡萄】
* @author Administrator
*
*/
public class NongChang {
/**
* 读取菜单
* @return
*/
public static HashMap getmenu{
HashMap menu=new HashMap;
try {
File file=new File("menu.txt");
if(!file.exists){
file.createNewFile;
}
BufferedReader readmenu=new BufferedReader(new FileReader(file));
String temp=null;
while((temp=readmenu.readLine)!=null){
String info[]=temp.split("=");
menu.put(info[0],info[1]);
}
readmenu.close;
}catch (Exception e) {
e.printStackTrace;
}
return menu;
}
/**
* 根据客户需求选择生产对应的水果
* @param shuiguoname
* @return
*/
public static ShuiGuo getShuiGuo(String shuiguoname){
ShuiGuo shuiguo=null;
try{
String classname=getmenu.get(shuiguoname);
if(classname==null || classname.equals("")){
shuiguo=null;
}
Class classobj=Class.forName(classname);
shuiguo=(ShuiGuo)classobj.newInstance;
}catch(Exception e){
e.printStackTrace;
}
return shuiguo;
}
}
Menu.txt
苹果=com.click369.test2.PingGuo
草莓=com.click369.test2.CaoMei
葡萄=com.click369.test2.PuTao返回搜狐,查看更多
责任编辑: