简单工厂模式
实例一:简单电视机工厂
某电视机厂专为各知名电视机品牌代工生产各类电视机,当需要海尔牌电视机时只需要在调用该工厂的工厂方法时传入参数“Haier”,需要海信电视机时只需要传入参数“Hisense”,工厂可以根据传入的不同参数返回不同品牌的电视机。现使用简单工厂模式来模拟该电视机工厂的生产过程。 public class Client { public static void main(String args[]) {
try {
TV tv; String
brandName=XMLUtilTV.getBrandName(); tv=TVFactory.produceTV(brandName); tv.play(); }
catch(Exception e) { System.out.println(e.getMessage()); } } }
public class HaierTV implements TV { public void play() { System.out.println(\海尔电视机播放中......\ } }
public class HisenseTV implements TV { public void play()
{
System.out.println(\海信电视机播放中......\ } }
public interface TV { public void play(); }
public class TVFactory {
public static TV produceTV(String brand) throws Exception { if(brand.equalsIgnoreCase(\ { System.out.println(\电视机工厂生产海尔电视机!\ return new HaierTV(); } else
if(brand.equalsIgnoreCase(\ { System.out.println(\电视机工厂生产海信电视机!\ return new HisenseTV(); } else { throw new Exception(\对不起,暂不能生产该品牌电视机!\ } } }
import javax.xml.parsers.*; import org.w3c.dom.*;
import org.xml.sax.SAXException; import java.io.*;
public class XMLUtilTV {
//该方法用于从XML配置文件中提取品牌名称,并返回该品牌名称 public static String getBrandName()
{ try { //创建文档对象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File(\ //获取包含品牌名称的文本节点 NodeList nl = doc.getElementsByTagName(\ Node
classNode=nl.item(0).getFirstChild(); String
brandName=classNode.getNodeValue().trim();
return brandName; }
catch(Exception e) { e.printStackTrace(); return null; } } } 实例二:权限管理
在某OA系统中,系统根据对比用户在登录时输入的账号和密码以及在数据库中存储的账号和密码是否一致来进行身份验证,如果验证通过,则取出存储在数据库中的用户权限等级(以整数形式存储),根据不同的权限等级创建不同等级的用户对象,不同等级的用户对象拥有不同的操作权限。现使用简单工厂模式来设计该权限管理模块。 public class Administrator extends User { public Administrator() { System.out.println(\创建管理员对象!\ } public void diffOperation() { System.out.println(\管理员拥有创建和管理假条权限!\ } }
public class Client { public static void main(String args[]) {
try {
User user; UserDAO userDao=new UserDAO();
int
permission=userDao.findPermission(\n\ user=UserFactory.getUser(permission); user.sameOperation(); user.diffOperation(); }
catch(Exception e) { System.out.println(e.getMessage());
} } }
public class Employee extends User { public Employee() { System.out.println(\创建员工对象!\ } public void diffOperation() { System.out.println(\员工拥有创建假条权限!\ } }
public class Manager extends User { public Manager() { System.out.println(\创建经理对象!\ } public void diffOperation() { System.out.println(\经理拥有创建和审批假条权限!\ } }
public abstract class User { public void sameOperation() {
System.out.println(\修改个人资料!\ } public abstract void diffOperation(); }
public class UserDAO {
public int findPermission(String
userName,String userPassword)
{ if(\=userPassword) { return 2; } else { return -1; } } }
public class UserFactory { public static User getUser(int permission) { if(0==permission) { return new Employee(); } else if(1==permission) { return new Manager(); } else if(2==permission) { return new Administrator(); } else { return null; } } }
工厂方法模式
实例一:电视机工厂 将原有的工厂进行分割,为每种品牌的电视机提供一个子工厂,海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海信电
视机,如果需要生产TCL电视机或创维电视机,只需要对应增加一个新的TCL工厂或创维工厂即可,原有的工厂无须做任何修改,使得整个系统具有更加的灵活性和可扩展性。
public class Client { public static void main(String args[]) {
try {
TV tv;
TVFactory factory; factory=(TVFactory)XMLUtil.getBean(); tv=factory.produceTV(); tv.play(); }
catch(Exception e) { System.out.println(e.getMessage()); } } }
public class HaierTVFactory implements TVFactory {
public TV produceTV() { System.out.println(\海尔电视机工厂生产海尔电视机。\ return new HaierTV(); } }
public class HaierTV implements TV { public void play() { System.out.println(\海尔电视机播放中......\ }
}public class HisenseTVFactory implements TVFactory {
public TV produceTV() { System.out.println(\海信电视机工厂生产海信电视机。\ return new HisenseTV(); } }
public interface TV { public void play(); }
public interface TVFactory {
public TV produceTV(); }import javax.xml.parsers.*; import org.w3c.dom.*;
import org.xml.sax.SAXException; import java.io.*;
public class XMLUtil {
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象 public static Object getBean() { try { //创建文档对象 DocumentBuilderFactory dFactory =
DocumentBuilderFactory.newInstance(); DocumentBuilder builder =
dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File(\ //获取包含类名的文本节点
相关推荐: