设计模式(1)工厂模式和抽象工厂模式

2019-03-01  本文已影响0人  越过_1b61

1.工厂模式

工厂模式首先就是创建一个abstract抽象类

例如:

public abstract class A {

public String getid();

public String getname();

@Override

public String toString(){

return "id+"+getid()+"name"+getname();

}

}

有两个类实现它:

public class B extends A{

private String B.id;

private String B.name;

//省略一个构造函数

@Override

public String getid(){

return B.id;

}

@Override

public String getname(){

return B.name;

}

}

还有一个类C

public class C extends A{

private String C.id;

private String C.name;

//构造函数

@Override

public String getid(){

return C.id;

}

@Override

public String getname(){

return C.name;

}

}

最后我们有一个工厂类

public class AFactory{

public static A getA(String type,String id,String name){

if("B".equalsignoreCase(type)) return new B(id,name);

else return new C(id,name);

}

}

值得注意的是工厂模式也可以是单例模式

它可以根据你输入的类型进行创建对象!


抽象工厂模式:

首先是类型的创建:

有一个shape类

public abstract class shape{
void draw();
}

还有他的实现类:

public class Rectangle extends shape{
@Override
public void draw(){
System.out.println("Rectangle::draw()");
}
}

public class circle extends shape{
@Override
public void draw(){
System.out.println("shape::draw()");
}
}

其次有一个color类:

public abstract class color{
void paint();
}

还有它的实现类

public class red{
@Override
public void paint(){
System.out.println("red::paint()");
}

public class green{
@Override
public void paint(){
System.out.println("green::paint()");
}

然后就是抽象的工厂:

public abstract class Factory{
public abstract color getcolor(String color);
public abstract shape getShape(String shape);
}

抽象shape工厂

public abstract class ShapeFactory{
@Override
public shape getShape(String shape){
if(shape==null)
return null;
if(shape=="circle")
return new circle();
}
else if (shape=="rectangle")
return new rectangle();
}
@Override
public color getColor(String color){
return null;
}
}

public abstract class ColorFactory{

@Override

public shape getShape(String shape){
return null;
}

@Override

public color getColor(String color){
if(color==red)
return new red();
}
else
return new green();
}

最后根据输入信息创建对应的工厂

public class FactoryProducer{

public static Factory getFactory(String name){

if(name=="color")

return new colorFactory();

else

return new shapeFactory();

}

}

分析一下这个模式

首先创建工厂 Shape和Color抽象工厂并附上两个他们的实现类 circle...和green...

然后创建这两个抽象工厂的工厂abstractFactory并附上他的两个实现类colorFactory和shapeFactory,最后的话就是一个工厂的工厂来创建具体的工厂类。

上一篇 下一篇

猜你喜欢

热点阅读