Technology sharing

Design Pattern Factory Pattern

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Factory Exemplum est forma consiliorum in programmatibus obiecti ordinatisforma creationis genus.Exemplar officinarum maxime ad res creandas usus est, sed diversa ab eo directe in codice utens.new Keyword creatio alia in eo quod res per commune commercium creat, eo quod ab objecto processum creationis separat ab usu clientis codicis. Haec est prolixior introductio ad officinam exemplaris;

1. principalis features officinas exemplar

  1. Creatio processus obiecti encapsulated: Encapsulate objectum creationis processum in officina ordinis.
  2. Reduce coitu: Secernendo officinam abstractam et officinam concretam, coniunctio inter clientem et obiectum reducitur, faciens clientem programma facilius ampliare et conservare.
  3. Improve programma scalability: Cum opus novum productum addere debes, tantum opus est ut genus productum specificum et officinam correspondens classi addat pro modificatione) quae scalabilitatis codicis melioris.
  4. Facile est ponere et upgradeQuia ratio officinas in unum genus colligit processum creandi res, si modum rerum creandi mutare debes, tantum opus est ut officinas genus respondentes mitigare, et nullam in clientelam incursum habebis.
  5. codice reuse: fabrica exemplar potest abstrahere objectum processum creationis, cognoscere codicem reuse, et augere flexibilitatem et reusability codicem.

2. Ordo officinas exemplar

Factory exemplaria maxime in tria genera dividuntur: officinas simplex exemplar (staticam officinam exemplaris), officinam methodum exemplar et officinas formas abstractas.

1. Static Factory Methodo
  1. Definire officinam classis ad instantias diversorum generum referre, quae in parametris diversis innituntur.
  2. Factory classes plures modos statos continere solent, singulae methodi pro creatione cuiusdam operis respondentes.
  3. Commoda: Simplex ad efficiendum et ad intelligendum facilis.
  4. Incommoda: Officia classis officinarum nimis sunt graves.

Simple fabrica exemplar genus tabula

2. Modus Factory Modus (Modo Factory)
  1. Definire interface (officinam abstracta) pro rebus faciendis;Sed sit genus uter genus instantiate
  2. Modi officinae permittunt instantiationem classium ad subclasses differendam.
  3. Commoda: Bene scalability.
  4. Incommoda: Quotiens opus additur, genus quoddam et obiectum exsequendam officinam adiciendum est, duplicato numero generum in systematis et multiplicitate systematis augendo.

Factory modum exemplaris

3. Abstract Factory exemplar (Abstract Factory)
  1. Interfacem praebet ad creandam rerum seriem relatas vel independentes sine specificatione eorum classes concretas.
  2. Exemplar officinarum abstractum videri potest sicut in usu iuncturae methodi officinarum multiplex exemplaria.
  3. Commoda: Familia producta intra genus constringi potest. Propria officinas omnes fructus in familia producti creare potest.
  4. Incommoda: Auget abstractionem et difficultatem ratio intelligendi, et numerus generum in systemate signanter augebit.

abstrahere officinam exemplaris

3. Application missionibus officina exemplar

Exemplar officinas amplis applicationibus in ipsa evolutione habet, ut nexus datorum, UI imperium, lima processus, logging, retis communicationes, nuntius queues, notitia structurae, encryption et decryption, nuntius dis et labor scheduling. In his missionibus, utens officinarum exemplar, objectum creatio processus ab usu processuum separare potest, flexibilitatem et scalability systematis emendans.

4. exemplum exemplum Factory

1. Simple officina exemplum exemplum

In forma officina simplici, genus officinam definimus quae exempla diversorum generum reddere possunt quae in parametris transierunt.

Infra exemplum officinas simplicis exemplaris Javae scriptae. Figuram fabricabimus quae instantias circulorum, rectangulorum et quadratorum producere potest. Primum, figuram interfaciem (figuram) et plura genera concreta (Circulum, Rectanglum, Quadratum) definimus quae hanc interfaciem efficiunt.

  1. // 形状接口
  2. interface Shape {
  3. void draw();
  4. }
  5. // 圆形类
  6. class Circle implements Shape {
  7. @Override
  8. public void draw() {
  9. System.out.println("Inside Circle::draw() method.");
  10. }
  11. }
  12. // 矩形类
  13. class Rectangle implements Shape {
  14. @Override
  15. public void draw() {
  16. System.out.println("Inside Rectangle::draw() method.");
  17. }
  18. }
  19. // 正方形类
  20. class Square implements Shape {
  21. @Override
  22. public void draw() {
  23. System.out.println("Inside Square::draw() method.");
  24. }
  25. }

Deinceps definimus officinam esse ordinis (ShapeFactory) quae modis staticis utitur ad figuram objectorum generandam.

  1. // 形状工厂类
  2. class ShapeFactory {
  3. // 使用 getShape 方法获取形状类型的对象
  4. public static Shape getShape(String shapeType){
  5. if(shapeType == null){
  6. return null;
  7. }
  8. if(shapeType.equalsIgnoreCase("CIRCLE")){
  9. return new Circle();
  10. } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
  11. return new Rectangle();
  12. } else if(shapeType.equalsIgnoreCase("SQUARE")){
  13. return new Square();
  14. }
  15. return null;
  16. }
  17. }

Postremo classis officinas uti possumus ad res figuras acquirendas et eorum vocamusdrawmodum.

  1. public class FactoryPatternDemo {
  2. public static void main(String[] args) {
  3. // 获取 Circle 的对象,并调用它的 draw 方法
  4. Shape shape1 = ShapeFactory.getShape("CIRCLE");
  5. shape1.draw();
  6. // 获取 Rectangle 的对象,并调用它的 draw 方法
  7. Shape shape2 = ShapeFactory.getShape("RECTANGLE");
  8. shape2.draw();
  9. // 获取 Square 的对象,并调用它的 draw 方法
  10. Shape shape3 = ShapeFactory.getShape("SQUARE");
  11. shape3.draw();
  12. }
  13. }

In hoc exemplo;ShapeFactorygenus est reus creandoShape Instantia instrumenti.Client codice hoc facit per informationes generis transeundo (exampla linea) adShapeFactorygenus in modum stabilisgetShape ut instantia desideravit figura. Hoc modo cliens ex exsecutione generis specificae decoquitur et cum principio et clausula obsecutus est principio, hoc est, novae figurae classes extendi possunt sine modificatione huius codicis. Maior tamen incommoditas officinarum simplicium exemplaris est, quod si ratio cum novis familiis productis debet extendi (ut colores praeter figuras, etc.), officinarum genus mutari debet, quae partem apertam violat. -clausum principium. In hoc casu, considera methodo adhibita Factory exemplaris vel Abstractum Factory exemplar.

2. Factory modum exemplum exemplum

Adhuc exemplum figurantes, methodos ad ipsum creandum utimur.

Primum figuram interfaciei definiunt et tres classes exsequendam efficiunt.

  1. // 形状接口
  2. interface Shape {
  3. void draw();
  4. }
  5. // 圆形类
  6. class Circle implements Shape {
  7. @Override
  8. public void draw() {
  9. System.out.println("Inside Circle::draw() method.");
  10. }
  11. }
  12. // 矩形类
  13. class Rectangle implements Shape {
  14. @Override
  15. public void draw() {
  16. System.out.println("Inside Rectangle::draw() method.");
  17. }
  18. }
  19. // 正方形类
  20. class Square implements Shape {
  21. @Override
  22. public void draw() {
  23. System.out.println("Inside Square::draw() method.");
  24. }
  25. }

Deinceps definimus Creatorem interfaciem (Creator) et Creatorem concretum (Concrete Creator) ;

  1. // 创建者接口
  2. interface ShapeFactory {
  3. Shape getShape(String shapeType);
  4. }
  5. // 具体创建者类
  6. class RectangleFactory implements ShapeFactory {
  7. @Override
  8. public Shape getShape(String shapeType) {
  9. if (shapeType == null) {
  10. return null;
  11. }
  12. if (shapeType.equalsIgnoreCase("RECTANGLE")) {
  13. return new Rectangle();
  14. }
  15. return null;
  16. }
  17. }
  18. class CircleFactory implements ShapeFactory {
  19. @Override
  20. public Shape getShape(String shapeType) {
  21. if (shapeType == null) {
  22. return null;
  23. }
  24. if (shapeType.equalsIgnoreCase("CIRCLE")) {
  25. return new Circle();
  26. }
  27. return null;
  28. }
  29. }
  30. class SquareFactory implements ShapeFactory {
  31. @Override
  32. public Shape getShape(String shapeType) {
  33. if (shapeType == null) {
  34. return null;
  35. }
  36. if (shapeType.equalsIgnoreCase("SQUARE")) {
  37. return new Square();
  38. }
  39. return null;
  40. }
  41. }

Denique utimur concreto creatori genere ut res figuras obtineat et suos vocantdrawmodum;

  1. public class FactoryMethodPatternDemo {
  2. public static void main(String[] args) {
  3. ShapeFactory shapeFactory = new CircleFactory();
  4. // 获取 Circle 的对象,并调用它的 draw 方法
  5. Shape shape1 = shapeFactory.getShape("CIRCLE");
  6. shape1.draw();
  7. // 使用 RectangleFactory 来获取 Rectangle 的对象
  8. shapeFactory = new RectangleFactory();
  9. Shape shape2 = shapeFactory.getShape("RECTANGLE");
  10. shape2.draw();
  11. // 使用 SquareFactory 来获取 Square 的对象
  12. shapeFactory = new SquareFactory();
  13. Shape shape3 = shapeFactory.getShape("SQUARE");
  14. shape3.draw();
  15. }
  16. }

In hoc exemplo;Classis officinas genus in unaquaque figura creare nos correspondentes (Quamvis in applicationibus realibus, plerumque communius officinarum genus structurae erit, fortasse per imaginum conformationem seu reflexionem ad vitandum singulas officinas classes pro cuiusque producti classe scribere). Hoc adiuvat rationes fundamentales methodi Factory demonstrare;Hoc est, uter genus officinas instantiate . Nihilominus, ad casum simplicium in hoc exemplo, propensius esses ad exemplar Factory Simplex utendum, vel ad exemplaria alia designandum ad codicem duplicationem reducendam.

3. Abstract fabrica exemplum

Hoc exemplum telephonicas mobiles sumit ut exemplum, producta abstracta ad telephoniis gestabilibus (ut tegumenta, batteries, systemata operativa, etc.), et species producti specificas ad has interfaces efficiendas creat. Factory interfaces abstractas definire possumus et classes officinas concretas ad hos fructus producendos. Simplicior hic est exemplum ostendens quomodo exemplar Factory Abstractum utatur ad componentes (tegumenta et gravida) pro diversis effectibus et exemplaribus telephoniis gestabilibus;

Primum, productum interface et specifica producta definire;

  1. // 屏幕接口
  2. interface Screen {
  3. void display();
  4. }
  5. // 高端屏幕的实现
  6. class HighEndScreen implements Screen {
  7. @Override
  8. public void display() {
  9. System.out.println("显示高清屏幕");
  10. }
  11. }
  12. // 低端屏幕的实现
  13. class LowEndScreen implements Screen {
  14. @Override
  15. public void display() {
  16. System.out.println("显示普通屏幕");
  17. }
  18. }
  19. // 电池接口
  20. interface Battery {
  21. void charge();
  22. }
  23. // 高效电池的实现
  24. class HighEfficiencyBattery implements Battery {
  25. @Override
  26. public void charge() {
  27. System.out.println("快速充电");
  28. }
  29. }
  30. // 标准电池的实现
  31. class StandardBattery implements Battery {
  32. @Override
  33. public void charge() {
  34. System.out.println("标准充电");
  35. }
  36. }

Deinde definias officinas abstractas interfaciei et concreti officinas classis;

  1. // 手机组件工厂接口
  2. interface PhoneFactory {
  3. Screen createScreen();
  4. Battery createBattery();
  5. }
  6. // 高端手机工厂
  7. class HighEndPhoneFactory implements PhoneFactory {
  8. @Override
  9. public Screen createScreen() {
  10. return new HighEndScreen();
  11. }
  12. @Override
  13. public Battery createBattery() {
  14. return new HighEfficiencyBattery();
  15. }
  16. }
  17. // 低端手机工厂
  18. class LowEndPhoneFactory implements PhoneFactory {
  19. @Override
  20. public Screen createScreen() {
  21. return new LowEndScreen();
  22. }
  23. @Override
  24. public Battery createBattery() {
  25. return new StandardBattery();
  26. }
  27. }

Denique in codice clientis, qui officinas abstractas utitur ad res productas concretas creandas;

  1. public class PhoneFactoryPatternDemo {
  2. public static void main(String[] args) {
  3. // 使用高端手机工厂
  4. PhoneFactory highEndFactory = new HighEndPhoneFactory();
  5. Screen highEndScreen = highEndFactory.createScreen();
  6. Battery highEndBattery = highEndFactory.createBattery();
  7. highEndScreen.display();
  8. highEndBattery.charge();
  9. // 使用低端手机工厂
  10. PhoneFactory lowEndFactory = new LowEndPhoneFactory();
  11. Screen lowEndScreen = lowEndFactory.createScreen();
  12. Battery lowEndBattery = lowEndFactory.createBattery();
  13. lowEndScreen.display();
  14. lowEndBattery.charge();
  15. }
  16. }

In hoc exemplo duas officinas telephonicas mobiles definimus (altus finis et humilis-finis), unumquodque idoneus ad certum genus tegimenti et altilium.Cliens codicem intercedit cum classe officinas specificas per interfacies officinas abstractas, per quod consequitur decouptionem ex speciei producti ordinis. . Hoc modo, si novas telephonicas rationes in futuro (exempli gratia telephonicas medias addere), tantum opus est novas productorum classes et officinas classes respondentes addere sine modificatione clientis codicis existentes.

5. Libri

Factory exemplar est perutilis consilio exemplarisProcessum creationis obiectorum encapsulat, copulationem minuit, programmata scalabilitatis et facilitatem sustentationis ampliat, etc. late in evolutione programmatis adhibita est.Sed etiam aliquamIncommoda, ut immodica officia officinarum, difficultas in systematis dilatationis, etc. . Propterea in applicationibus agendi, negotiationes et electiones faciendae sunt in certis missionibus ac necessitatibus.

Si exemplar officinas (fabricae simplex, methodus officinas, officinas abstractas) tibi utilis est, memento delectare et colligere.