2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Factory Pattern इति एकः डिजाइन-प्रतिरूपः यः सामान्यतया वस्तु-उन्मुख-प्रोग्रामिङ्ग-मध्ये प्रयुक्तः अस्तिसृजनात्मकप्रतिमान प्रकारः ।कारखानस्य प्रतिमानं मुख्यतया वस्तुनिर्माणार्थं उपयुज्यते, परन्तु कोडे प्रत्यक्षतया उपयोगात् भिन्नम् अस्ति ।new
कीवर्ड-निर्माणं भिन्नं यत् सामान्य-अन्तरफलकस्य माध्यमेन वस्तुनिर्माणं करोति, तस्मात् वस्तुनिर्माण-प्रक्रियाम् क्लायन्ट्-सङ्केतस्य उपयोगात् पृथक् करोति । कारखानाप्रतिमानस्य विस्तृतपरिचयः निम्नलिखितम् अस्ति ।
कारखानाप्रतिमानाः मुख्यतया त्रयः प्रकाराः विभक्ताः सन्ति : सरलकारखानप्रतिमानं (स्थिरकारखानप्रतिमानं), कारखानाविधिप्रतिमानं अमूर्तकारखानप्रतिमानं च
सरलं कारखाना प्रतिमान वर्ग आरेख
कारखाना विधि प्रतिरूप
अमूर्त कारखाना पैटर्न
कारखानाप्रतिमानस्य वास्तविकविकासे अनुप्रयोगानाम् विस्तृतश्रेणी अस्ति, यथा आँकडाधारसंयोजनं, UI नियन्त्रणं, सञ्चिकाप्रक्रियाकरणं, लॉगिंग्, संजालसञ्चारः, सन्देशपङ्क्तिः, आँकडासंरचना, एन्क्रिप्शनं विगुप्तीकरणं च, सन्देशपुशः कार्यनिर्धारणं च एतेषु परिदृश्येषु कारखानाप्रतिमानस्य उपयोगेन वस्तुनिर्माणप्रक्रियायाः उपयोगप्रक्रियायाः पृथक्करणं कर्तुं शक्यते, येन प्रणाल्याः लचीलता, मापनीयता च सुधरति
सरल-कारखान-प्रतिरूपेण वयं एकं कारखाना-वर्गं परिभाषयामः यत् पारित-पैरामीटर्-आधारितं भिन्न-प्रकारस्य उदाहरणानि प्रेषयितुं शक्नोति ।
अधः जावाभाषायां लिखितस्य सरलस्य कारखानाप्रतिमानस्य उदाहरणं दृश्यते । वयं एकं आकारकारखानम् निर्मास्यामः यत् वृत्तानां, आयतानां, वर्गानां च उदाहरणानि उत्पादयितुं शक्नोति । प्रथमं वयं एकं shape interface (Shape) तथा च अनेकाः concrete classes (Circle, Rectangle, Square) परिभाषयामः ये एतत् interface कार्यान्वन्ति ।
- // 形状接口
- interface Shape {
- void draw();
- }
-
- // 圆形类
- class Circle implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Circle::draw() method.");
- }
- }
-
- // 矩形类
- class Rectangle implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Rectangle::draw() method.");
- }
- }
-
- // 正方形类
- class Square implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Square::draw() method.");
- }
- }
तदनन्तरं वयं एकं फैक्ट्री क्लास् (ShapeFactory) परिभाषयामः यत् shape objects जनयितुं static methods इत्यस्य उपयोगं करोति ।
- // 形状工厂类
- class ShapeFactory {
-
- // 使用 getShape 方法获取形状类型的对象
- public static Shape getShape(String shapeType){
- if(shapeType == null){
- return null;
- }
- if(shapeType.equalsIgnoreCase("CIRCLE")){
- return new Circle();
- } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
- return new Rectangle();
- } else if(shapeType.equalsIgnoreCase("SQUARE")){
- return new Square();
- }
-
- return null;
- }
- }
अन्ते वयं shape objects प्राप्तुं तेषां आह्वानं कर्तुं factory class इत्यस्य उपयोगं कर्तुं शक्नुमःdraw
प्रक्रिया।
- public class FactoryPatternDemo {
-
- public static void main(String[] args) {
- // 获取 Circle 的对象,并调用它的 draw 方法
- Shape shape1 = ShapeFactory.getShape("CIRCLE");
- shape1.draw();
-
- // 获取 Rectangle 的对象,并调用它的 draw 方法
- Shape shape2 = ShapeFactory.getShape("RECTANGLE");
- shape2.draw();
-
- // 获取 Square 的对象,并调用它的 draw 方法
- Shape shape3 = ShapeFactory.getShape("SQUARE");
- shape3.draw();
- }
- }
अस्मिन् उदाहरणे .ShapeFactory
वर्गः सृजनस्य उत्तरदायी भवतिShape
अन्तरफलकस्य एकः उदाहरणः ।क्लायन्ट् कोडः प्रकारसूचनाः (उदा. स्ट्रिंग्) इत्यस्मै पारयित्वा एतत् करोतिShapeFactory
वर्गस्य स्थिरविधिःgetShape
इष्टाकारस्य उदाहरणं प्राप्तुं । एवं प्रकारेण ग्राहकः विशिष्टवर्गस्य कार्यान्वयनात् वियुग्मितः भवति तथा च उद्घाटनसमापनसिद्धान्तस्य अनुपालनं करोति अर्थात् ग्राहकसङ्केतं परिवर्तनं विना नूतनाकारवर्गाणां विस्तारः कर्तुं शक्यते परन्तु सरलस्य कारखानाप्रतिमानस्य एकः प्रमुखः दोषः अस्ति यत् यदि प्रणालीं नूतनोत्पादपरिवारैः सह विस्तारयितुं आवश्यकं भवति (यथा आकृतेः अतिरिक्तं वर्णाः इत्यादयः), तर्हि कारखानावर्गस्य परिवर्तनस्य आवश्यकता भवति, यत् मुक्तस्य भागस्य उल्लङ्घनं करोति -निमीलित सिद्धान्त। अस्मिन् सन्दर्भे Factory Method pattern अथवा Abstract Factory pattern इत्यस्य उपयोगं कर्तुं विचारयन्तु ।
अद्यापि उदाहरणरूपेण आकारं गृह्णन्तः वयं तस्य निर्माणार्थं अभियांत्रिकीविधिनाम् उपयोगं कुर्मः ।
प्रथमं shape interface (Product) परिभाष्य त्रीणि कार्यान्वयनवर्गाणि रचयन्तु ।
- // 形状接口
- interface Shape {
- void draw();
- }
-
- // 圆形类
- class Circle implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Circle::draw() method.");
- }
- }
-
- // 矩形类
- class Rectangle implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Rectangle::draw() method.");
- }
- }
-
- // 正方形类
- class Square implements Shape {
- @Override
- public void draw() {
- System.out.println("Inside Square::draw() method.");
- }
- }
तदनन्तरं, creator interface (Creator) तथा concrete creator (Concrete Creator) परिभाषयन्तु:
- // 创建者接口
- interface ShapeFactory {
- Shape getShape(String shapeType);
- }
-
- // 具体创建者类
- class RectangleFactory implements ShapeFactory {
- @Override
- public Shape getShape(String shapeType) {
- if (shapeType == null) {
- return null;
- }
- if (shapeType.equalsIgnoreCase("RECTANGLE")) {
- return new Rectangle();
- }
- return null;
- }
- }
-
- class CircleFactory implements ShapeFactory {
- @Override
- public Shape getShape(String shapeType) {
- if (shapeType == null) {
- return null;
- }
- if (shapeType.equalsIgnoreCase("CIRCLE")) {
- return new Circle();
- }
- return null;
- }
- }
-
- class SquareFactory implements ShapeFactory {
- @Override
- public Shape getShape(String shapeType) {
- if (shapeType == null) {
- return null;
- }
- if (shapeType.equalsIgnoreCase("SQUARE")) {
- return new Square();
- }
- return null;
- }
- }
अन्ते, shape objects प्राप्तुं concrete creator class इत्यस्य उपयोगं कुर्वन्तु तथा च तेषां आह्वानं कुर्वन्तुdraw
प्रक्रिया:
- public class FactoryMethodPatternDemo {
-
- public static void main(String[] args) {
- ShapeFactory shapeFactory = new CircleFactory();
-
- // 获取 Circle 的对象,并调用它的 draw 方法
- Shape shape1 = shapeFactory.getShape("CIRCLE");
- shape1.draw();
-
- // 使用 RectangleFactory 来获取 Rectangle 的对象
- shapeFactory = new RectangleFactory();
- Shape shape2 = shapeFactory.getShape("RECTANGLE");
- shape2.draw();
-
- // 使用 SquareFactory 来获取 Square 的对象
- shapeFactory = new SquareFactory();
- Shape shape3 = shapeFactory.getShape("SQUARE");
- shape3.draw();
- }
- }
अस्मिन् उदाहरणे .वयं प्रत्येकस्य आकारवर्गस्य कृते तत्सम्बद्धं कारखानावर्गं रचयामः (यद्यपि वास्तविक-अनुप्रयोगेषु, सामान्यतया अधिकसामान्य-कारखान-वर्ग-संरचना भविष्यति, सम्भवतः विन्यास-सञ्चिकानां माध्यमेन अथवा प्रत्येकस्य उत्पाद-वर्गस्य कृते पृथक्-पृथक्-कारखान-वर्गाणां लेखनं परिहरितुं प्रतिबिम्बस्य माध्यमेन) एतेन Factory Method pattern इत्यस्य मूलभूतसिद्धान्तान् प्रदर्शयितुं साहाय्यं भवति,अर्थात् कारखाना उपवर्गः कस्य वर्गस्य उदाहरणं कर्तव्यमिति निर्णयं करोतु . तथापि, अस्मिन् उदाहरणे सरलप्रकरणस्य कृते, भवान् Simple Factory-प्रतिरूपस्य उपयोगं कर्तुं अधिकं प्रवृत्तः भवितुम् अर्हति अथवा कोड-द्वैधतां न्यूनीकर्तुं अन्येषां डिजाइन-प्रतिमानानाम् विचारं कर्तुं शक्नोति ।
एतत् उदाहरणं मोबाईल-फोनान् उदाहरणरूपेण गृह्णाति, मोबाईल-फोन-सम्बद्धानि अमूर्त-उत्पादाः (यथा स्क्रीन, बैटरी, ऑपरेटिंग्-प्रणाली इत्यादयः), एतेषां अन्तरफलकानां कार्यान्वयनार्थं विशिष्टानि उत्पादवर्गाणि निर्माति च ततः वयं एतेषां उत्पादानाम् उत्पादनार्थं अमूर्तकारखाना-अन्तरफलकान्, कंक्रीट-कारखाना-वर्गान् च परिभाषितुं शक्नुमः । अत्र सरलीकृतं उदाहरणं दर्शितं यत् मोबाईलफोनस्य भिन्न-भिन्न-मेक-माडल-योः कृते घटकानां (स्क्रीन्-बैटरी-योः) उत्पादनार्थं Abstract Factory-प्रतिमानस्य उपयोगः कथं करणीयः इति:
प्रथमं उत्पादस्य अन्तरफलकं विशिष्टं उत्पादं च परिभाषयन्तु :
- // 屏幕接口
- interface Screen {
- void display();
- }
-
-
- // 高端屏幕的实现
- class HighEndScreen implements Screen {
- @Override
- public void display() {
- System.out.println("显示高清屏幕");
- }
- }
-
- // 低端屏幕的实现
- class LowEndScreen implements Screen {
- @Override
- public void display() {
- System.out.println("显示普通屏幕");
- }
- }
-
-
- // 电池接口
- interface Battery {
- void charge();
- }
-
-
- // 高效电池的实现
- class HighEfficiencyBattery implements Battery {
- @Override
- public void charge() {
- System.out.println("快速充电");
- }
- }
-
- // 标准电池的实现
- class StandardBattery implements Battery {
- @Override
- public void charge() {
- System.out.println("标准充电");
- }
- }
तदनन्तरं, abstract factory interface तथा concrete factory class परिभाषयन्तु :
- // 手机组件工厂接口
- interface PhoneFactory {
- Screen createScreen();
- Battery createBattery();
- }
-
- // 高端手机工厂
- class HighEndPhoneFactory implements PhoneFactory {
- @Override
- public Screen createScreen() {
- return new HighEndScreen();
- }
-
- @Override
- public Battery createBattery() {
- return new HighEfficiencyBattery();
- }
- }
-
- // 低端手机工厂
- class LowEndPhoneFactory implements PhoneFactory {
- @Override
- public Screen createScreen() {
- return new LowEndScreen();
- }
-
- @Override
- public Battery createBattery() {
- return new StandardBattery();
- }
- }
अन्ते क्लायन्ट्-सङ्केतः, यः ठोस-उत्पाद-वस्तूनाम् निर्माणार्थं अमूर्त-कारखानस्य उपयोगं करोति:
- public class PhoneFactoryPatternDemo {
- public static void main(String[] args) {
- // 使用高端手机工厂
- PhoneFactory highEndFactory = new HighEndPhoneFactory();
- Screen highEndScreen = highEndFactory.createScreen();
- Battery highEndBattery = highEndFactory.createBattery();
-
- highEndScreen.display();
- highEndBattery.charge();
-
- // 使用低端手机工厂
- PhoneFactory lowEndFactory = new LowEndPhoneFactory();
- Screen lowEndScreen = lowEndFactory.createScreen();
- Battery lowEndBattery = lowEndFactory.createBattery();
-
- lowEndScreen.display();
- lowEndBattery.charge();
- }
- }
अस्मिन् उदाहरणे वयं द्वौ मोबाईलफोनकारखानौ (उच्चस्तरीयौ निम्नस्तरीयौ च) परिभाषयामः, प्रत्येकं विशिष्टप्रकारस्य स्क्रीनस्य बैटरीस्य च उत्पादनं कर्तुं समर्थम् ।क्लायन्ट्-सङ्केतः अमूर्त-कारखान-अन्तरफलकस्य माध्यमेन विशिष्ट-कारखान-वर्गेण सह अन्तरक्रियां करोति, तस्मात् विशिष्ट-उत्पाद-वर्गात् वियुग्मनं प्राप्नोति । . एवं प्रकारेण यदि भविष्ये नूतनानि दूरभाषप्रकाराः (उदाहरणार्थं मध्य-परिधि-फोनाः) योजयितुं आवश्यकाः सन्ति तर्हि विद्यमानस्य क्लायन्ट्-सङ्केतं परिवर्तनं विना केवलं नूतनानि उत्पादवर्गाणि तत्सम्बद्धानि कारखानावर्गाणि च योजयितुं आवश्यकाः सन्ति
कारखानाप्रतिरूपः अतीव उपयोगी डिजाइनप्रतिरूपः अस्ति,एतत् वस्तुनां निर्माणप्रक्रियाम् समाहितं करोति, युग्मनं न्यूनीकरोति, कार्यक्रमस्य मापनीयतां, अनुरक्षणस्य सुगमतां च सुधरयति इत्यादि । , सॉफ्टवेयरविकासे बहुधा प्रयुक्तः अस्ति ।तथापि अस्य केचन अपि सन्तिहानिः, यथा अतिकारखानादायित्वं, प्रणालीविस्तारे कठिनता इत्यादयः । . अतः व्यावहारिकप्रयोगेषु विशिष्टपरिदृश्यानां आवश्यकतानां च आधारेण व्यापार-विकल्पाः, विकल्पाः च करणीयाः ।
यदि कारखानाप्रतिमानं (सरलकारखाना, कारखानाविधिः, अमूर्तकारखाना) भवतः कृते उपयोगी भवति तर्हि तत् पसन्दं कृत्वा संग्रहीतुं स्मर्यताम्।