前言
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
之前以及说过比较简单的单例模式了,今天来聊一下工厂模式和抽象工厂模式
工厂模式
大概结构
我们随便实现一下
接口Shape(形状)
public interface Shape {
void drow();
}
定义实体类实现接口
实体类Circular(圆)
public class Circular implements Shape{
@Override
public void drow() {
System.out.println("圆对象");
}
}
实体类Rectangle(矩形)
public class Rectangle implements Shape{
@Override
public void drow() {
System.out.println("矩形对象");
}
}
创建工厂ShapeFactory
public class ShapeFactory{
public Shape getShape(String shapeType){
if(shapeType==null)
return null;
if(shapeType.equals("圆"))
return new Circular();
if(shapeType.equals("矩形"))
return new Rectangle();
return null;
}
}
可以看到我们定义String类型参数获取数据进行对比从而从工厂选择合适对象创建
我们只需要在主方法创建形状工厂对象
ShapeFactory shapeFactory=new ShapeFactory();
然后通过对其中getShape()方法的调用即可创建相应的形状对象
Shape shape=shapeFactory.getShape("矩形");
Shape shape1=shapeFactory.getShape("圆");
然后通过对象名shape,shape,即可操纵对应的对象
抽象工厂模式
如果说工厂模式是儿子,那么抽象工厂模式无疑就是爸爸了
主要就是对我们的工厂进行抽象化,其实工厂本身就是很抽象的,我们可以有手机厂,汽车厂等等
大概结构
我们随便实现一下
首先让我们的厂抽象起来
两个抽象方法分别获取一个工厂
public abstract class AbstractFactory {
public abstract Color getColor(String colorType);
public abstract Shape getShape(String shapeType);
}
上面已经有一个厂了,我们创建新厂的接口和实体类
/**
* 接口,颜色
*/
public interface Color {
void drow();
}
/**
* 实体类,颜色,红
*/
public class Red implements Color{
@Override
public void drow() {
System.out.println("drow:红");
}
}
/**
* 实体类,颜色,蓝
*/
public class Blue implements Color{
@Override
public void drow() {
System.out.println("drow:蓝");
}
}
对两个厂重写抽象方法
/**
* 形状工厂
*/
public class ShapeFactory extends AbstractFactory{
@Override
public Color getColor(String colorType) {
return null;
}
@Override
public Shape getShape(String shapeType){
if(shapeType==null)
return null;
if(shapeType.equals("圆"))
return new Circular();
if(shapeType.equals("矩形"))
return new Rectangle();
return null;
}
}
/**
* 颜色工厂
*/
public class ColorFactory extends AbstractFactory{
@Override
public Shape getShape(String shapeType) {
return null;
}
@Override
public Color getColor(String colorType){
if(colorType==null)
return null;
if(colorType.equals("红"))
return new Red();
if(colorType.equals("蓝"))
return new Blue();
return null;
}
}
对工厂进行选择
/**
* 获取工厂
*/
public class FactoryProducer {
public static AbstractFactory getFactory(String choice){
if(choice.equals("形状")){
return new ShapeFactory();
} else if(choice.equals("颜色")){
return new ColorFactory();
}
return null;
}
}
主方法中我们只需要创建获取工厂的对应对象
FactoryProducer factoryProducer=new FactoryProducer();
即可通过getFactory()方法获取对应工厂
AbstractFactory colorFactory=factoryProducer.getFactory("颜色");
AbstractFactory shapeFactory=factoryProducer.getFactory("形状");
然后再通过getColor()以及getShape()方法获取某颜色或是某形状对象
Color color=colorFactory.getColor("蓝");
Shape shape=shapeFactory.getShape("圆");
写在最后
大概就是这么个东西了,理解起来还是比较容易的,具体优缺点这些大家可以参考:菜鸟
最后还是欢迎大家可以一起学习,一起进步