#大话设计模式之工厂方法模式#

  说实话,工厂方法模式其实跟简单工厂模式很相似,就是修复了简单工厂的一些不符合开闭原则的bug,但如果你的项目比较小型,还是推荐简单工厂来比较简单方便,毕竟工厂方法还是有美中不足的地方。

  现在有一个需求:编写一个学雷锋帮助老人的类。

  我们使用简单工厂模式和工厂方法模式写,两个区别就在于界面类和工厂类,其余一样。

雷锋父类(包含了雷锋的方法,扫地,买米... ...)

package FactoryMethodPattern;

public class LeiFeng {
    public void sweep(){
        System.out.println("扫地");
    }
    public void wash(){
        System.out.println("洗衣服");
    }
    public void buyRice(){
        System.out.println("买米");
    }
}

大学生子类

package FactoryMethodPattern;

public class Undergraduate extends LeiFeng{

}

社区志愿者子类(跟大学生一样的功能,工厂的两个两个零件)

package FactoryMethodPattern;

public class Volunteer extends LeiFeng{

}

简单工厂类(此类最大特点在于里面使用了switch选择实例化对象,当需要增加新对象比如“学雷锋的小学生”我们就需要修改工程类,修改类是违法开闭原则的,所以有问题!)

package FactoryMethodPattern;

public class SimpleFactory {
    public static LeiFeng craeteLeiFeng(String type){
        LeiFeng result = new LeiFeng();
        switch(type){
        case "学雷锋的大学生":
            result = new Undergraduate();
            break;
        case "社区志愿者":
            result =new Volunteer();
            break;
        }
        return result;
    }
}

工厂方法类(对比简单工厂类,将switch的对象分为不同的类,当需要增加对象时,只需要新增类就好了,符合开闭原则,缺点是增加产品工厂需要额外的开发量。)

package FactoryMethodPattern;

public interface IFactory {
    LeiFeng CreateLieFeng();
}
class UndergraduateFactory implements IFactory{

    @Override
    public LeiFeng CreateLieFeng() {
        // TODO Auto-generated method stub
        return new Undergraduate();
    }
    
}
class VolunteerFactory implements IFactory{

    @Override
    public LeiFeng CreateLieFeng() {
        // TODO Auto-generated method stub
        return new Volunteer();
    }
    
}

界面类(printFrame1是简单工厂的界面,printFrame2是工厂方法的界面,差不多的)

package FactoryMethodPattern;

public class Main {
    public void printFrame1(){
        LeiFeng student = SimpleFactory.craeteLeiFeng("学雷锋的大学生");
        
        student.buyRice();
        student.sweep();
        student.wash();
    }
    public void printFrame2(){
        IFactory factory = new UndergraduateFactory();
        LeiFeng student = factory.CreateLieFeng();
        
        student.buyRice();
        student.sweep();
        student.wash();
    }
    public static void main(String[] args) {
        Main main = new Main();
        main.printFrame1();
        System.out.println();
        main.printFrame2();
    }
}

使用方法:同样是为了更方便的实例化对象而产生的两个工厂,工厂方法编程风格更优良,但也有美中不足增加开销的缺点,但还是利大于弊。

Ending... ... 

简单来说:

普通过程:new特定的对象,调用特定的方法;

模式过程:修补了简单工程模式里面,需要新增新方法的时候,需要修改源代码!!违反开闭原则,这里的措施是,要新增新方法,你就新增个新类吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它通过一个工厂类来创建不同类型的对象,而无需暴露对象创建的逻辑给客户端。在Python中,简单工厂模式可以通过一个工厂类来创建不同的产品对象。下面是一个简单的示例: ```python class Product: def operation(self): pass class ConcreteProductA(Product): def operation(self): print("Performing operation A.") class ConcreteProductB(Product): def operation(self): print("Performing operation B.") class SimpleFactory: @staticmethod def create_product(product_type): if product_type == "A": return ConcreteProductA() elif product_type == "B": return ConcreteProductB() else: raise ValueError("Invalid product type.") # 使用简单工厂创建产品对象 factory = SimpleFactory() product_a = factory.create_product("A") product_a.operation() product_b = factory.create_product("B") product_b.operation() ``` 在上述示例中,`Product` 是一个抽象产品类,`ConcreteProductA` 和 `ConcreteProductB` 是具体产品类。`SimpleFactory` 是工厂类,通过 `create_product` 方法根据不同的产品类型创建相应的产品对象。 通过简单工厂模式,客户端无需知道具体的产品类,只需要通过工厂类来创建产品对象。这样可以降低客户端与具体产品类的耦合度,并且当需要新增产品时,只需要修改工厂类即可。 希望这个简单的示例能帮助你理解简单工厂模式在Python中的应用。如果有任何进一步的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值