程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Java 設計模式之工廠方法(Factory Method)

Java 設計模式之工廠方法(Factory Method)

編輯:關於JSP

本文章給各位java愛好詳細介紹關於Java 設計模式之工廠方法(Factory Method)的一些用法,這以圖文方式介紹希望對各位有所幫助。

類型: 對象創建型模式

意圖:定義一個用於創建對象的接口,讓子類決定實例化哪一個類。 Factory Method使一個類的實例化延遲到其子類。

適用性:

  • 當一個類不知道它所必須創建的對象的類的時候。
  • 當一個類希望由它的子類來指定它所創建的對象的時候。
  • 當類將創建對象的職責委托給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理者這一信息局部化的時候。

結構:

123941.png

參與者:

Product(Document)
— 定義工廠方法所創建的對象的接口。
• ConcreteProduct(MyDocument)
— 實現Product接口。
• Creator(Application)
— 聲明工廠方法,該方法返回一個Product類型的對象。Creator也可以定義一個工廠方
法的缺省實現,它返回一個缺省的 ConcreteProduct對象。
— 可以調用工廠方法以創建一個 Product對象。
• ConcreteCreator(MyApplication)
— 重定義工廠方法以返回一個 ConcreteProduct實例。

例子

factory_method.png

注釋:在實際的代碼中,我添加了幾個Account的接口。工廠方法為:getAccount()

 代碼如下 復制代碼

Account.java

package com.raysmond.factorymethod;

public interface Account {
 //定義工廠方法創建的對象的接口
 public RoleType getRole();
 public void setAccountId(Integer accountId);
 public Integer getAccountId();
 public void setAccountName(String name);
 public String getAccountName();
}
User.java

package com.raysmond.factorymethod;

public class User implements Account{
 private Integer userId;
 private String userName;

 @Override
 public RoleType getRole() {
  return RoleType.USER;
 }
 
 @Override
 public void setAccountId(Integer accountId) {
  this.userId = accountId;
 }

 @Override
 public Integer getAccountId() {
  return userId;
 }

 @Override
 public void setAccountName(String name) {
  this.userName = name;
 }

 @Override
 public String getAccountName() {
  return userName;
 }

 
}
Admin.java

package com.raysmond.factorymethod;

public class Admin implements Account{
 private Integer adminId;
 private String adminName;
 
 @Override
 public RoleType getRole() {
  return RoleType.ADMIN;
 }
 
 @Override
 public void setAccountId(Integer accountId) {
  this.adminId = accountId;
 }
 
 @Override
 public Integer getAccountId() {
  return adminId;
 }

 @Override
 public void setAccountName(String name) {
  this.adminName = name;
 }
 @Override
 public String getAccountName() {
  return adminName;
 }

}
AccountFactory.java

package com.raysmond.factorymethod;

public interface AccountFactory {
 Account getAccount();
}
UserFactory.java

package com.raysmond.factorymethod;

public class UserFactory implements AccountFactory{

 @Override
 public Account getAccount() {
  return new User();
 }

}
AdminFactory.java

package com.raysmond.factorymethod;

public class AdminFactory implements AccountFactory{

 @Override
 public Account getAccount() {
  return new Admin();
 }

}
RoleType.java

package com.raysmond.factorymethod;

public enum RoleType {
 ADMIN,USER
}
Test.java

package com.raysmond.factorymethod;

public class Test {
 public static void main(String[] args){
  AccountFactory userFactory = new UserFactory();
  User user = (User) userFactory.getAccount();
  
  AccountFactory adminFactory = new AdminFactory();
  Admin admin = (Admin) adminFactory.getAccount();
  
  System.out.println(user.getRole());
  System.out.println(admin.getRole());
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved