0
点赞
收藏
分享

微信扫一扫

抽象工厂模式-设计模式

抽象工厂模式(Abstract Factory Pattern)在Java中是一种非常有用的设计模式,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。这个模式提供了一种创建对象的最佳方式,它封装了创建对象的细节,并允许客户依赖于抽象类型而不是具体类型。

以下是一个简单的Java案例,展示了抽象工厂模式的应用。在这个例子中,我们将创建两个产品族:一种用于制作文本编辑器的组件(如按钮和文本框),另一种用于制作图形编辑器的组件(如圆形和矩形)。

首先,我们定义两个抽象产品接口(Button 和 Shape)以及它们的具体实现。

java复制代码
 // 抽象产品:按钮  
 
 interface Button {  
 
     void paint();  
 
 }  
 
   
 
 // 文本编辑器的按钮  
 
 class TextButton implements Button {  
 
     @Override  
 
     public void paint() {  
 
         System.out.println("Text Button painted.");  
 
     }  
 
 }  
 
   
 
 // 图形编辑器的按钮  
 
 class GraphicalButton implements Button {  
 
     @Override  
 
     public void paint() {  
 
         System.out.println("Graphical Button painted.");  
 
     }  
 
 }  
 
   
 
 // 抽象产品:形状  
 
 interface Shape {  
 
     void draw();  
 
 }  
 
   
 
 // 文本编辑器的形状(这里仅为示例,实际上文本编辑器可能不需要形状)  
 
 class TextShape implements Shape {  
 
     @Override  
 
     public void draw() {  
 
         // 文本编辑器通常不处理形状,这里仅为演示  
 
         System.out.println("Text Shape drawn (dummy).");  
 
     }  
 
 }  
 
   
 
 // 图形编辑器的圆形  
 
 class Circle implements Shape {  
 
     @Override  
 
     public void draw() {  
 
         System.out.println("Circle drawn.");  
 
     }  
 
 }  
 
   
 
 // 图形编辑器的矩形  
 
 class Rectangle implements Shape {  
 
     @Override  
 
     public void draw() {  
 
         System.out.println("Rectangle drawn.");  
 
     }  
 
 }

接下来,我们定义抽象工厂接口及其具体实现。

java复制代码
 // 抽象工厂  
 
 interface Factory {  
 
     Button createButton();  
 
     Shape createShape();  
 
 }  
 
   
 
 // 文本编辑器工厂  
 
 class TextEditorFactory implements Factory {  
 
     @Override  
 
     public Button createButton() {  
 
         return new TextButton();  
 
     }  
 
   
 
     @Override  
 
     public Shape createShape() {  
 
         return new TextShape(); // 文本编辑器可能不需要形状,这里仅为示例  
 
     }  
 
 }  
 
   
 
 // 图形编辑器工厂  
 
 class GraphicalEditorFactory implements Factory {  
 
     @Override  
 
     public Button createButton() {  
 
         return new GraphicalButton();  
 
     }  
 
   
 
     @Override  
 
     public Shape createShape() {  
 
         return new Circle(); // 这里返回Circle作为示例,也可以返回Rectangle等  
 
     }  
 
 }

最后,我们通过一个客户端类来演示如何使用这些工厂和产品。

java复制代码
 public class Client {  
 
     public static void main(String[] args) {  
 
         // 使用文本编辑器工厂  
 
         Factory textFactory = new TextEditorFactory();  
 
         Button textButton = textFactory.createButton();  
 
         Shape textShape = textFactory.createShape();  
 
   
 
         textButton.paint();  
 
         textShape.draw(); // 尽管这里只是打印了一个假信息  
 
   
 
         // 使用图形编辑器工厂  
 
         Factory graphFactory = new GraphicalEditorFactory();  
 
         Button graphButton = graphFactory.createButton();  
 
         Shape graphShape = graphFactory.createShape();  
 
   
 
         graphButton.paint();  
 
         graphShape.draw();  
 
     }  
 
 }

在这个例子中,TextEditorFactory 和 GraphicalEditorFactory 是具体工厂类,它们分别负责创建特定产品族(文本编辑器和图形编辑器)的对象。客户端代码通过调用工厂的方法来获取产品对象,而无需知道这些对象是如何被创建的。这样,我们就实现了产品对象的创建与使用的分离,提高了系统的灵活性和可扩展性。

举报

相关推荐

0 条评论