04工厂方法和抽象工厂模式代码实现

发布时间 2023-04-24 21:19:43作者: vbig

工厂方法

  1. 用工厂方法设计电动自行车工厂的模拟程序。为每种品牌的电动自行车提供一个子工厂,如爱玛工厂专门负责生产爱玛(Aima)牌电动自行车,雅迪工厂专门负责生产雅迪(Yadea)牌电动自行车。如果今后需要生产台铃(Tailg)牌电动自行车,只需要增加一个新的台铃电动自行车工厂即可,无须修改原有代码,使得整个系统具有更强的灵活性和可扩展性。要求:
  • 用UML设计“电动自行车工厂的模拟程序”的结构图

  • 编写Java源程序

Factory

package com.fish.factory.factoryMethodPattern;  
  
public interface Factory {  
    public Product factoryMethod();  
}

Product

package com.fish.factory.factoryMethodPattern;  
  
public interface Product {  
}

AimaFactory

package com.fish.factory.factoryMethodPattern;  
  
public class AimaFactory implements Factory{  
    @Override  
    public Product factoryMethod() {  
        return new AimaProduct();  
    }  
}

AimaProduct

package com.fish.factory.factoryMethodPattern;  
  
public class AimaProduct implements Product{  
  
}

YadeaFactory

package com.fish.factory.factoryMethodPattern;  
  
public class YadeaFactory implements Factory{  
    @Override  
    public Product factoryMethod() {  
        return new YadeaProduct();  
    }  
}

YadeaProduct

package com.fish.factory.factoryMethodPattern;  
  
public class YadeaProduct implements Product{  
}

TailgFactory

package com.fish.factory.factoryMethodPattern;  
  
public class TailgFactory implements Factory{  
    @Override  
    public Product factoryMethod() {  
        return new TailgProduct();  
    }  
}

TailgProduct

package com.fish.factory.factoryMethodPattern;  
  
public class TailgProduct implements Product{  
  
}

抽象工厂

  1. 用抽象工厂模式设计农场类。设计两个农场,一个是昭关(SrFarm)农场用于养牛和种菜,一个是上饶(Sgfarm)农场用于养马和种水果,可以在以上两个农场中定义一个生成动物的方法newAnimal()和一个培养植物的方法newPlant(),定义马类、牛类、蔬菜类和水果类等具体产品类,并定义一个show()方法输出马、牛、蔬菜和水果字样。客户端程序通过对象生成器类ReadXML读取XML配置文件中的数据来决定养什么动物和培养什么植物。
  • 用UML设计农场类的结构图

  • 编写Java源程序

Farm

package com.fish.factory.abstractFactoryPattern;  
  
public interface Farm {  
    public Plant newPlant();  
    public Animal newAnimal();  
}

Plant

package com.fish.factory.abstractFactoryPattern;  
  
public interface Plant {  
        public void show();  
}

Animal

package com.fish.factory.abstractFactoryPattern;  
  
public interface Animal {  
    public void show();  
}

PlantFruit

package com.fish.factory.abstractFactoryPattern;  
  
public class PlantFruit implements Plant{  
    @Override  
    public void show() {  
        System.out.println("水果");  
    }  
}```

PlantVegetable
```java
package com.fish.factory.abstractFactoryPattern;  
  
public class PlantVegetable implements Plant{  
    @Override  
    public void show() {  
        System.out.println("蔬菜");  
    }  
}

AnimalCattle

package com.fish.factory.abstractFactoryPattern;  
  
public class AnimalCattle implements Animal{  
    public void show(){  
        System.out.println("牛");  
    }  
}

AnimalHorse

package com.fish.factory.abstractFactoryPattern;  
  
public class AnimalHorse implements Animal{  
    public void show(){  
        System.out.println("马");  
    }  
}

SgFarm

package com.fish.factory.abstractFactoryPattern;  
  
public class SgFarm implements Farm{  
  
    @Override  
    public Plant newPlant() {  
        return new PlantFruit();  
    }  
  
    @Override  
    public Animal newAnimal() {  
        return new AnimalHorse();  
    }  
}

SrFarm

package com.fish.factory.abstractFactoryPattern;  
  
public class SrFarm implements Farm{  
  
    @Override  
    public Plant newPlant() {  
        return new PlantVegetable();  
    }  
  
    @Override  
    public Animal newAnimal() {  
        return new AnimalCattle();  
    }  
}