本文目錄一覽:
求java工廠模式的一個簡單代碼例子,盡量簡單
這個應該比較簡單一點。
某系統日誌記錄器要求支持多種日誌記錄方式,如文件記錄、數據庫記錄等,且用戶可以根據要求動態選擇日誌記錄方式。現使用工廠方法模式設計該系統,並寫出相應Java代碼。
interface Log{
public void writeLog();
}
class FileLog implements Log{
public void writeLog(){
System.out.println(“文件記錄”);
}
}
class DatabaseLog implements Log{
public void writeLog(){
System.out.println(“數據庫記錄”);
}
}
interface LogFactory{
public Log createLog();
}
class FileLogFactory implements LogFactory{
public Log createLog(){
return new FileLog();
}
}
class DatabaseLogFactory implements LogFactory{
public Log createLog(){
return new DatabaseLog();
}
}
public class Client{
public static void main(String[] args) {
try{
Log log;
LogFactory factory;
//這裡可以改成使用DOM和Java反射機制讀取XML文件,獲取工廠類名
factory=new DatabaseLogFactory ();
log=factory.createLog();
log.writeLog();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
JAVA工廠模式和單體模式
單體模式 很簡單,就是將構造函數變為私有,那麼就不能通過new 來創建對象。 同時創建一個 共有的靜態的方法來獲得實例,代碼如下:
class Test{
private static Test instance = null;
private Test(){}
public static Test getInstance(){
if( instance == null ){
instance = new Test();
}
return instance ;
}
}
工廠模式有三個參與者,抽象產品(Product)、工廠(Creator)和具體產品(ConcreteProduct)。客戶只會看到工廠和抽象產品。
public interface Product{
public String getName();
}
public class ConcreteProduct implements Product{
public String getName(){
return “產品1”;
}
}
public class Creator{
public static Product create1(){
return new ConcreteProduct();
}
}
工廠模式的作用在於將創建具體產品的方法由工廠類控制,客戶只需要知道產品的抽象類型
java工廠模式例子
產品
public interface Work {
void doWork();
}
ConcreteProduct
public class StudentWork implements Work {
public void doWork() {
System.out.println(“學生做作業!”);
}
}
public class TeacherWork implements Work {
public void doWork() {
System.out.println(“老師審批作業!”);
}
}
生產者
public interface IWorkFactory {
Work getWork();
}
ConcreteCreator
public class StudentWorkFactory implements IWorkFactory {
public Work getWork() {
return new StudentWork();
}
}
public class TeacherWorkFactory implements IWorkFactory {
public Work getWork() {
return new TeacherWork();
}
}
Test
public class Test {
public static void main(String[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory();
studentWorkFactory.getWork().doWork();
IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
teacherWorkFactory.getWork().doWork();
}
}
java簡單工廠模式是什麼
簡單工廠模式的:簡單工廠模式是類的創建模式,又叫做靜態工廠方法(Static Factory Method)模式。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。
那麼簡單工廠模式是在什麼場景下使用呢,下面就以本人的理解舉例說明:
就拿登錄功能來說,假如應用系統需要支持多種登錄方式如:口令認證、域認證(口令認證通常是去數據庫中驗證用戶,而域認證則是需要到微軟的域中驗證用戶)。那麼自然的做法就是建立一個各種登錄方式都適用的接口,如下圖所示:
public interface Login {
//登錄驗證
public boolean verify(String name , String password);
}
public class DomainLogin implements Login {
@Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* 業務邏輯
*/
return true;
}
}
public class PasswordLogin implements Login {
@Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* 業務邏輯
*/
return true;
}
}
我們還需要一個工廠類LoginManager,根據調用者不同的要求,創建出不同的登錄對象並返回。而如果碰到不合法的要求,會返回一個Runtime異常。
public class LoginManager {
public static Login factory(String type){
if(type.equals(“password”)){
return new PasswordLogin();
}else if(type.equals(“passcode”)){
return new DomainLogin();
}else{
/**
* 這裡拋出一個自定義異常會更恰當
*/
throw new RuntimeException(“沒有找到登錄類型”);
}
}
}
測試類:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String loginType = “password”;
String name = “name”;
String password = “password”;
Login login = LoginManager.factory(loginType);
boolean bool = login.verify(name, password);
if (bool) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}
}
簡單工廠模式的結構如下圖:
我們可以設想一下真實的場景,如果把上面的Test當做一個servlet的話,當客戶端發起登錄請求——請求交給服務端的Servlet——Servlet根據客戶端傳遞的loginType調用工廠類LoginManager的factory()方法——factory()方法根據參數loginType創建相應的登錄驗證類(DomainLogin或PasswordLogin)並返回——登錄驗證類調用方法verify()驗證用戶名密碼是否正確
假如不使用簡單工廠模式則驗證登錄Servlet代碼如下(假設Test為一個Servlet,變量loginType、name、password表示從客戶端傳遞過來的參數):
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String loginType = “password”;
String name = “name”;
String password = “password”;
//處理口令認證
if(loginType.equals(“password”)){
PasswordLogin passwordLogin = new PasswordLogin();
boolean bool = passwordLogin.verify(name, password);
if (bool) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}
//處理域認證
else if(loginType.equals(“passcode”)){
DomainLogin domainLogin = new DomainLogin();
boolean bool = domainLogin.verify(name, password);
if (bool) {
/**
* 業務邏輯
*/
} else {
/**
* 業務邏輯
*/
}
}else{
/**
* 業務邏輯
*/
}
}
}
上面的代碼會不會很蛋疼啊。。。呵呵
《JAVA與模式》一書中使用java.text.DataFormat類作為簡單工廠模式的典型例子敘述。
簡單工廠模式的優點
模式的核心是工廠類。這個類含有必要的邏輯判斷,可以決定在什麼時候創建哪一個登錄驗證類的實例,而調用者則可以免除直接創建對象的責任。簡單工廠模式通過這種做法實現了對責任的分割,當系統引入新的登錄方式的時候無需修改調用者。
簡單工廠模式的缺點
這個工廠類集中了所以的創建邏輯,當有複雜的多層次等級結構時,所有的業務邏輯都在這個工廠類中實現。什麼時候它不能工作了,整個系統都會受到影響。
寫一個抽象工廠模式 java實例 出來
工廠模式java實例如下:
public interface Work {
void doWork();
}
ConcreteProduct
public class StudentWork implements Work {
public void doWork() {
System.out.println(“學生做作業!”);
}
}
public class TeacherWork implements Work {
public void doWork() {
System.out.println(“老師審批作業!”);
}
}
生產者
public interface IWorkFactory {
Work getWork();
}
ConcreteCreator
public class StudentWorkFactory implements IWorkFactory {
public Work getWork() {
return new StudentWork();
}
}
public class TeacherWorkFactory implements IWorkFactory {
public Work getWork() {
return new TeacherWork();
}
}
Test
public class Test {
public static void main(String[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory();
studentWorkFactory.getWork().doWork();
IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
teacherWorkFactory.getWork().doWork();
}
}
字符串反轉如下:
public String getReverseStr(String str)
{
String reverseStr = “”;
if (null != str !str.equals(“”))
{
for (int i = 1 ; i =str.length(); i++){
reverseStr += str.charAt(str.length() – i);
// 依次按與原字符串相反的順序拼裝字符串,內部會自動進行類型轉換
//str.length() – i剛好是str的下標,因為i是從1開始
}
}
return reverseStr;
}
冒泡排序算法,從小到大
public int[] sortArr(int[] targetArr){
//小到大的排序
int temp = 0;
for(int i = 0;itargetArr.length;i++){
for(int j = i;jtargetArr.length;j++){
if(targetArr[i]targetArr[j]){
temp = targetArr[i];
targetArr[i] = targetArr[j];
targetArr[j] = temp;
}
}
}
return targetArr;
}
原創文章,作者:XVYAA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/130306.html