04工厂方法和抽象工厂模式代码实现
工厂方法
- 用工厂方法设计电动自行车工厂的模拟程序。为每种品牌的电动自行车提供一个子工厂,如爱玛工厂专门负责生产爱玛(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{
}
抽象工厂
- 用抽象工厂模式设计农场类。设计两个农场,一个是昭关(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();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律