接上篇,抽象工厂模式将汽车的一些属性可以抽象出来,可以理解为给不同汽车品牌生成时加上不同的特性,如颜色等,具体代码如下:
引入颜色接口:
public interface Colour {
void fill();
}
将颜色与汽车生成品牌抽象出来,增加抽象类:
public abstract class CarAndColourFactory {
public abstract Car getCar(String CarType);
public abstract Colour getColour(String colour);
}
继承抽象类,分别对不同属性的特征进行操作,如涂上颜色等,首先实现颜色接口:
public class Green implements Colour {
@Override
public void fill() {
System.out.println("涂上绿色");
}
}
public class Red implements Colour {
@Override
public void fill() {
System.out.println("涂上红色");
}
}
汽车品牌和汽车颜色分别继承抽象类:
public class CarTypeFactory extends CarAndColourFactory{
@Override
public Car getCar(String CarType) {
if(CarType == null){
return null;
}
if(CarType.equalsIgnoreCase("XiaoMi")){
return new XiaoMi();
} else if(CarType.equalsIgnoreCase("HuaWei")){
return new HuaWei();
} else if(CarType.equalsIgnoreCase("Tesla")){
return new Tesla();
}
return null;
}
@Override
public Colour getColour(String colour) {
return null;
}
}
public class ColourFactory extends CarAndColourFactory{
@Override
public Car getCar(String CarType) {
return null;
}
@Override
public Colour getColour(String colour) {
if(colour == null){
return null;
}
if(colour.equalsIgnoreCase("Green")){
return new Green();
} else if(colour.equalsIgnoreCase("Red")){
return new Red();
}
return null;
}
}
增加一个根据参数区分增加汽车属性的加工工厂类,如下:
public class FactoryProducer {
public static CarAndColourFactory get(String choice){
if(choice.equalsIgnoreCase("Car")){
return new CarTypeFactory();
}else if(choice.equalsIgnoreCase("Colour")){
return new ColourFactory();
}
return null;
}
}
进行汽车加工:文章来源:https://www.toymoban.com/news/detail-858116.html
public class CarTest {
public static void main(String[] args){
/* CarFactory carFactory = new CarFactory();
carFactory.getCar("xiaomi").draw();
carFactory.getCar("huawei").draw();
carFactory.getCar("tesla").draw();*/
CarAndColourFactory carAndColourFactory1 = FactoryProducer.get("Car");
carAndColourFactory1.getCar("xiaomi").draw();
CarAndColourFactory carAndColourFactory= FactoryProducer.get("Colour");
carAndColourFactory.getColour("Green").fill();
}
}
产生结果:
文章来源地址https://www.toymoban.com/news/detail-858116.html
到了这里,关于手写Java设计模式之抽象工厂模式,附源码解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!