Java設計形式編程中簡略工場與籠統工場形式的應用實例。本站提示廣大學習愛好者:(Java設計形式編程中簡略工場與籠統工場形式的應用實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式編程中簡略工場與籠統工場形式的應用實例正文
簡略工場形式
類圖
經由過程一個工場類,以一個前提來創立對應的對象
//營業功效
public interface ICalculation {
double getResult(double numA, double numB);
}
public class CalcAdd implements ICalculation {
@Override
public double getResult(double numA, double numB) {
System.out.println("加法");
return numA + numB;
}
}
public class CalcSubtract implements ICalculation {
@Override
public double getResult(double numA, double numB) {
System.out.println("減法");
return numA - numB;
}
}
/*
* 簡略工場形式 存眷:對象的創立
* 樹立一個工場類,對完成了統一接口的或許是存在繼續關系的一些類停止實例的創立
*/
public class Test4Simple {
public static void main(String[] args) {
// String operation = "/";
String operation = "+";
// String operation = "-";
// String operation = "*";
double numA = 182, numB = 33;
ICalculation createCalc = CalcSimpleFactory.createCalc(operation);
double result = createCalc.getResult(numA, numB);
System.out.println(result);
}
}
簡略工場的缺點: 簡略工場創立產物時須要傳遞響應的參數,假如傳遞不准確就取不到對象了。
改良:多辦法創立分歧產物
類圖
public class CalcMultipleFactory {
public static ICalculation produceAdd() {
return new CalcAdd();
}
public static ICalculation produceSubtract() {
return new CalcSubtract();
}
public static ICalculation produceMultiply() {
return new CalcMultiply();
}
public static ICalculation produceDivide() {
return new CalcDivide();
}
}
public class Test4Multiple {
public static void main(String[] args) {
double numA = 182, numB = 33;
ICalculation createCalc = CalcMultipleFactory.produceAdd();
double result = createCalc.getResult(numA, numB);
System.out.println(result);
createCalc = CalcMultipleFactory.produceSubtract();
result = createCalc.getResult(numA, numB);
System.out.println(result);
createCalc = CalcMultipleFactory.produceMultiply();
result = createCalc.getResult(numA, numB);
System.out.println(result);
createCalc = CalcMultipleFactory.produceDivide();
result = createCalc.getResult(numA, numB);
System.out.println(result);
}
}
籠統工場形式
外面有幾個概念:籠統工場、實體工場、籠統產物、實體產物
籠統工場:界說創立產物的籠統辦法
實體工場:詳細的創立哪一種產物
籠統產物:一個接口或基類
實體產物:完成詳細功效,或派生
類圖
//籠統產物1
public interface IProduct1 {
public void show();
}
//籠統產物2
public interface IProduct2 {
public void show();
}
//實體產物1
public class Product1 implements IProduct1 {
public void show() {
System.out.println("創立了1型產物");
}
}
//實體產物2
public class Product2 implements IProduct2 {
public void show() {
System.out.println("創立了2型產物");
}
}
/*
* 1A 1B屬於Product1 統一產物品級構造中
* 2A 2B屬於Product2
*/
public class GradeProduct1A extends Product1 {
@Override
public void show() {
super.show();
System.out.println("這是產物1下的:產物A");
}
}
public class GradeProduct1B extends Product1 {
@Override
public void show() {
super.show();
System.out.println("這是產物1下的:產物B");
}
}
public class GradeProduct2A extends Product2 {
@Override
public void show() {
super.show();
System.out.println("這是產物2下的:產物A");
}
}
public class GradeProduct2B extends Product2 {
@Override
public void show() {
super.show();
System.out.println("這是產物2下的:產物B");
}
}
//籠統工場 創立分歧的籠統產物
public interface IFactory {
public IProduct1 createProduct1A();//1類產物 型號A
public IProduct1 createProduct1B();//1類產物 型號B
public IProduct2 createProduct2A();//2類產物 型號A
public IProduct2 createProduct2B();//2類產物 型號B
}
//實體工場 創立實體產物,前往類型為籠統產物
public class Factory implements IFactory {
public IProduct1 createProduct1A() {
return new GradeProduct1A();
}
public IProduct1 createProduct1B() {
return new GradeProduct1B();
}
public IProduct2 createProduct2A() {
return new GradeProduct2A();
}
public IProduct2 createProduct2B() {
return new GradeProduct2B();
}
}
/*
* 籠統工場形式:用來創立一組相干或許互相依附的對象
*
* 流程:籠統工場,實體工場 臨盆產物
* 籠統產物,實體產物 完成產物功效
* 缺陷:當須要增長一個產物(由籠統和實體組成),工場都須要更改
*/
public class Test4Abstract {
public static void main(String[] args) {
IFactory factory = new Factory();
IProduct1 product1a = factory.createProduct1A();
product1a.show();
IProduct1 product1b = factory.createProduct1B();
product1b.show();
IProduct2 product2a = factory.createProduct2A();
product2a.show();
IProduct2 product2b = factory.createProduct2B();
product2b.show();
}
}