参考内容:工厂模式
简单工厂模
定义一个工厂类,根据传入的参数不同创建不同的实例
package factoryPattern.simple;
public interface Shape{
void draw();
}
package factoryPattern.simple;
// 画圆类
public class CircleShape implements Shape{
@Override
public void draw() {
System.out.println("开始画圆");
}
}
package factoryPattern.simple;
public class RectShape implements Shape{
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
package factoryPattern.simple;
public class TangleShape implements Shape{
@Override
public void draw() {
System.out.println("绘制三角形");
}
}
package factoryPattern.simple;
public class ShapeFactory{
public static final String TAG ="ShapeFactory";
public static Shape getShape(String type){
if(type.equals("circle")){
return new CircleShape();
}
else if(type.equals("rect")){
return new RectShape();
}
else{
return new TangleShape();
}
}
}
package factoryPattern.simple;
public class Test {
public static void main(String[] args) {
Shape rectShape = ShapeFactory.getShape("rect");
rectShape.draw();
Shape circleShape = ShapeFactory.getShape("circle");
circleShape.draw();
Shape tangleShape = ShapeFactory.getShape("tangle");
tangleShape.draw();
}
}
工厂方法模式
每个对象都有一个与之对应的工厂
package factoryPattern.factoryMethod;
public interface Read {
void read();
}
package factoryPattern.factoryMethod;
public class PngRead implements Read{
@Override
public void read() {
System.out.println("读取Png格式图片");
}
}
package factoryPattern.factoryMethod;
public class JpgRead implements Read{
@Override
public void read() {
System.out.println("读取Jpg图片");
}
}
package factoryPattern.factoryMethod;
public interface ReadFactory {
Read getRead();
}
package factoryPattern.factoryMethod;
public class GifGetReadFactory implements ReadFactory{
@Override
public Read getRead() {
return new GifRead();
}
}
package factoryPattern.factoryMethod;
public class PngGetReadFactory implements ReadFactory{
@Override
public Read getRead() {
return new PngRead();
}
}
package factoryPattern.factoryMethod;
public class JpgGetReadFactory implements ReadFactory{
@Override
public Read getRead() {
return new JpgRead();
}
}
package factoryPattern.factoryMethod;
public class Test {
public static void main(String[] args) {
ReadFactory jpgread = new JpgGetReadFactory();
Read jRead =jpgread.getRead();
jRead.read();
ReadFactory pngread =new PngGetReadFactory();
Read pRead =pngread.getRead();
pRead.read();
ReadFactory gifread =new GifGetReadFactory();
Read gRead =gifread.getRead();
gRead.read();
}
}
抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
package factoryPattern.abstractFactory;
public interface operationController {
void control();
}
package factoryPattern.abstractFactory;
public interface UiController {
void display();
}
package factoryPattern.abstractFactory;
public class AndoridOperationFactroy implements operationController{
@Override
public void control() {
System.out.println("Andorid平台操作");
}
}
package factoryPattern.abstractFactory;
public class AndoridUIController implements UiController{
@Override
public void display() {
System.out.println("Andorid界面");
}
}
package factoryPattern.abstractFactory;
public class iosOperationFactory implements operationController{
@Override
public void control() {
System.out.println("ios平台操作");
}
}
package factoryPattern.abstractFactory;
public class iosUIController implements UiController{
@Override
public void display() {
System.out.println("ios界面");
}
}
package factoryPattern.abstractFactory;
public class WpOperationFactroy implements operationController{
@Override
public void control() {
System.out.println("window平台操作");
}
}
package factoryPattern.abstractFactory;
public class WpUIController implements UiController{
@Override
public void display() {
System.out.println("window界面");
}
}
package factoryPattern.abstractFactory;
public class WpUIController implements UiController{
@Override
public void display() {
System.out.println("window界面");
}
}
package factoryPattern.abstractFactory;
public interface SystemFactory {
public operationController cOperationController();
public UiController cUiController();
}
package factoryPattern.abstractFactory;
public class AndoridFactory implements SystemFactory{
@Override
public operationController cOperationController() {
return new AndoridOperationFactroy();
}
@Override
public UiController cUiController() {
return new AndoridUIController();
}
}
package factoryPattern.abstractFactory;
public class iosFactory implements SystemFactory{
@Override
public operationController cOperationController() {
return new iosOperationFactory();
}
@Override
public UiController cUiController() {
return new iosUIController();
}
}
package factoryPattern.abstractFactory;
public class WpFactor implements SystemFactory{
@Override
public operationController cOperationController() {
return new WpOperationFactroy();
}
@Override
public UiController cUiController() {
return new iosUIController();
}
}
package factoryPattern.abstractFactory;
public class AndoridFactory implements SystemFactory{
@Override
public operationController cOperationController() {
return new AndoridOperationFactroy();
}
@Override
public UiController cUiController() {
return new AndoridUIController();
}
}
package factoryPattern.abstractFactory;
public class iosFactory implements SystemFactory{
@Override
public operationController cOperationController() {
return new iosOperationFactory();
}
@Override
public UiController cUiController() {
return new iosUIController();
}
}
package factoryPattern.abstractFactory;
public class WpFactor implements SystemFactory{
@Override
public operationController cOperationController() {
return new WpOperationFactroy();
}
@Override
public UiController cUiController() {
return new iosUIController();
}
}
package factoryPattern.abstractFactory;
public class Test {
public static void main(String[] args) {
SystemFactory systemFactory;
UiController uiController;
operationController operationcontroller;
systemFactory = new AndoridFactory();
uiController = systemFactory.cUiController();
operationcontroller= systemFactory.cOperationController();
uiController.display();
operationcontroller.control();
}
}