抽象工厂模式
来源:互联网 发布:java内嵌机制 编辑:程序博客网 时间:2024/06/05 08:15
/**
* 超级工厂创建工厂,工厂创建对象
* @author ruis
*
*/
//设计一个接口来表示Shape
public interface Shape {
//接口方法:画图的方法
void draw();
}
//创建实现接口的具体类的方法 圆形类
public class Circleimplements Shape {
@Override
public void draw() {
// 创建一个画圆形的方法
System.out.println("Inside Circle::draw() method.");
}
}
//创建实现接口的具体类 正方形类
public class Squareimplements Shape {
@Override
public void draw() {
// 一个画正方形的方法
System.out.println("Inside Square::draw()method.");
}
}
//创建实现接口的具体类 矩形类
public class Rectangleimplements Shape {
@Override
public void draw() {
//包含一个画矩形的方法
System.out.println("Inside Rectangle::draw()method.");
}
}
//为打印机创建一个界面
public interface Printer {
void print();
}
//创建实现打印机接口的具体类 纸质打印机类
public class PaperPrinterimplements Printer {
@Override
public void print() {
System.out.println("paper");
}
}
//创建实现打印机接口的具体类 网页式打印机类
public class WebPrinterimplements Printer {
@Override
public void print() {
System.out.println("web");
}
}
//创建实现打印机接口的具体类 屏幕式打印机类
public class ScreenPrinterimplements Printer {
@Override
public void print() {
System.out.println("screen");
}
}
//创建一个抽象类来获取打印机和形状对象的工厂
public abstract class AbstractFactory {
abstract Printer getPringer(Stringtype);
abstract Shape getShape(Stringshape);
Printer getPrinter(Stringtype) {
return null;
}
}
//创建形状工厂ShapeFactory类,根据给定的信息判断生成形状对象
public class ShapeFactoryextends AbstractFactory {
@Override
Printer getPringer(String type) {
// TODO Auto-generated method stub
return null;
}
@Override
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;
}
}
//创建打印工厂PrinterFactory类,根据给定的信息判断生成打印机对象
public class PrinterFactoryextends AbstractFactory {
@Override
Printer getPrinter(String type) {
if (type ==null) {
return null;
}
if (type.equalsIgnoreCase("paper")) {
return new PaperPrinter();
} else if (type.equalsIgnoreCase("web")) {
return new WebPrinter();
} else if (type.equalsIgnoreCase("Screen")) {
return new ScreenPrinter();
}
return null;
}
@Override
Shape getShape(String shape) {
// TODO Auto-generated method stub
return null;
}
@Override
Printer getPringer(String type) {
// TODO Auto-generated method stub
return null;
}
}
//创建一个Factory生成器/生产器类,通过传递Shape或Printer等信息来获取工厂。
public class FactoryProducer {
public static AbstractFactory getFactory(Stringchoice){
if(choice.equalsIgnoreCase("SHAPE")){
return new ShapeFactory();
}else if(choice.equalsIgnoreCase("Printer")){
return new PrinterFactory();
}
return null;
}
}
/**
* 获取工厂A,通过工厂A的get()方法获取对象,调用对象的方法
* 获取工厂B,通过工厂B的get()方法获取对象,调用对象的方法
* @author ruis
*
*/
public class Main {
public static void main(String[]args) {
AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
Shape shape1 =shapeFactory.getShape("CIRCLE");
shape1.draw();
Shape shape2 =shapeFactory.getShape("RECTANGLE");
shape2.draw();
Shape shape3 =shapeFactory.getShape("SQUARE");
shape3.draw();
AbstractFactory printerFactory = FactoryProducer.getFactory("printer");
Printer printer1 =printerFactory.getPrinter("Paper");
printer1.print();
Printer printer2 =printerFactory.getPrinter("Web");
printer2.print();
Printer printer3 =printerFactory.getPrinter("Screen");
printer3.print();
/**
* Inside Circle::draw() method.
Inside Rectangle::draw()method.
Inside Square::draw()method.
paper
web
screen
*/
}
}
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- HDU 6143 Killer Names (第二类斯特林数or容斥)
- 串
- Js下载进度条的实现
- 结巴分词词性
- python-用@property将一个方法(例如getXxx/setXxx)变成属性
- 抽象工厂模式
- 请编写一个c函数,该函数给出一个字节中被置为1的位的个数
- Python 安装模块时,使用pip install xxx安装时,很慢的解决方法
- 2017年8月14日提高组T2 温度
- C++ 顺序容器
- 单调栈
- 九度1439:Least Common Multiple
- 使用Spring报错:No default constructor found;
- Android C++和JAVA互相调用