博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模式
阅读量:5795 次
发布时间:2019-06-18

本文共 4485 字,大约阅读时间需要 14 分钟。

抽象工厂模式


代码实现

  • 创建一个形状接口
public interface Shape {   void draw();}复制代码

-创建实现接口的实体类

//长方形public class Rectangle implements Shape {    @Override   public void draw() {      System.out.println("Inside Rectangle::draw() method.");   }}复制代码

//正方形public class Square implements Shape {    @Override   public void draw() {      System.out.println("Inside Square::draw() method.");   }}复制代码

//圆形public class Circle implements Shape {    @Override   public void draw() {      System.out.println("Inside Circle::draw() method.");   }}复制代码

  • 创建一个颜色接口
public interface Color {   void fill();}复制代码

  • 创建接口的实现类
//红色public class Red implements Color {    @Override   public void fill() {      System.out.println("Inside Red::fill() method.");   }}复制代码

//绿色public class Green implements Color {    @Override   public void fill() {      System.out.println("Inside Green::fill() method.");   }}复制代码

  • 为颜色和形状创建抽象类(接口)来获取工厂
public abstract class AbstractFactory {   public abstract Color getColor(String color);   public abstract Shape getShape(String shape) ;}复制代码

  • 创建扩展了抽象工厂的工厂类,根据给定信息生产指定产品
public class ShapeFactory extends AbstractFactory {       @Override   public 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;   }      @Override   public Color getColor(String color) {      return null;   }}复制代码

public class ColorFactory extends AbstractFactory {       @Override   public Shape getShape(String shapeType){      return null;   }      @Override   public Color getColor(String color) {      if(color == null){         return null;      }              if(color.equalsIgnoreCase("RED")){         return new Red();      } else if(color.equalsIgnoreCase("GREEN")){         return new Green();      } else if(color.equalsIgnoreCase("BLUE")){         return new Blue();      }      return null;   }}复制代码

创建一个工厂生成器

public class FactoryProducer {   public static AbstractFactory getFactory(String choice){      if(choice.equalsIgnoreCase("SHAPE")){         return new ShapeFactory();      } else if(choice.equalsIgnoreCase("COLOR")){         return new ColorFactory();      }      return null;   }}复制代码

  • 测试
public class AbstractFactoryPatternDemo {   public static void main(String[] args) {       //获取形状工厂      AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");       //获取形状为 Circle 的对象      Shape shape1 = shapeFactory.getShape("CIRCLE");       //调用 Circle 的 draw 方法      shape1.draw();       //获取形状为 Rectangle 的对象      Shape shape2 = shapeFactory.getShape("RECTANGLE");       //调用 Rectangle 的 draw 方法      shape2.draw();            //获取形状为 Square 的对象      Shape shape3 = shapeFactory.getShape("SQUARE");       //调用 Square 的 draw 方法      shape3.draw();       //获取颜色工厂      AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");       //获取颜色为 Red 的对象      Color color1 = colorFactory.getColor("RED");       //调用 Red 的 fill 方法      color1.fill();       //获取颜色为 Green 的对象      Color color2 = colorFactory.getColor("Green");       //调用 Green 的 fill 方法      color2.fill();       //获取颜色为 Blue 的对象      Color color3 = colorFactory.getColor("BLUE");       //调用 Blue 的 fill 方法      color3.fill();   }}复制代码

抽象工厂

public abstract class AbstractFactory{    //不允许外部访问    protected abstract Car getCar();        public Car getCar(String name){        if("BMW".equals(name)){            return new BMWfactory().getCar();        }else if("Benz".equals(name)){            return new Benzfactory().getCar();        }else if("Audi".equals(name)){            return new Audifactory().getCar();        }else{            return null;        }    }}public class DefaultFactory extends AbstractFactory{private AudiFactory defaultFactory = new AudiFactory();    @Override    protected abstract Car getCar(){        return defaultFactory.getCar();    }}public class AudiFactory extends AbstractFactory{    public Car getCar(){        return new Audi();    }}public class BMWFactory extends AbstractFactory{    public Car getCar(){        return new BMW();    }}public class BenzFactory extends AbstractFactory{    public Car getCar(){        return new Benz();    }}复制代码
  • 测试
public static void main(String []args){    DefaultFactory factory = new DefaultFactory();    factory.get("Benz");}复制代码

转载地址:http://fxdfx.baihongyu.com/

你可能感兴趣的文章
CUDA学习(二十八)
查看>>
Java动态代理简述
查看>>
c语言排序算法总结
查看>>
敏捷开发“松结对编程”系列之十二:L型代码结构(质量篇之一)
查看>>
技术的成长
查看>>
Netcat
查看>>
关于AS5 SSH支持key认证的完全解决方案
查看>>
Struts1.2 Hibernate Spring框架组合(三)
查看>>
.net 2.0 BackgroundWorker类详细用法
查看>>
Eclipse快捷键指南(转自蓝法典的专栏)
查看>>
ATI X300 显卡在 Edgy 上使用 aiglx 指南
查看>>
PowerDesigner V15 逆向工程
查看>>
二十年后的回眸(9)——十年著书路
查看>>
windows 2008 R2无法创建性能收集器
查看>>
支持!解决卡巴斯基程序错误及程序断开的问题!
查看>>
如何使用Shodan搜索引擎来诊断漏洞?
查看>>
多了解一下Chrome开发者控制台
查看>>
安全人才严重匮乏催生"情报即服务"产业
查看>>
飞企互联新三板上市 资本的注入让三个梦想着陆
查看>>
大数据时代下惠普的惊人超越之路
查看>>