三种工厂模式详解

 1,简单工厂,工厂模式,抽象工厂类图

 

 

  

 

  

产品等级结构

  • 产品的继承结构

如图一的圆形表示的冰箱就是一个产品等级结构,三角形表示的洗衣机、方形表示的空调他们都是一个产品等级结构

产品族

  • 不同的产品等级结构的一组产品组成产品族

如图二的第一行实心红色表示的就是一个产品族,其中该海尔的产品族分别由海尔冰箱、海尔洗衣机和海尔空调组成。

产品族和产品等级结构的关系

image

  • 从图二纵向来看,不管是海尔空调、美的空调、国美空调他们都是同一种产品结构的不同的品牌产品
  • 从横向来看海尔产品族、美的产品族、国美产品族,组成他们的产品等级结构都是相同的。并且他们都是家电类、切包含的产品相同
  • 一组相同产品等级结构的产品可以通过工厂方法表示:如海尔空调、格力空调、美的空调、国美空调等他们都是空调。
  • 产品族可以用抽象工厂表示
  •  
  • 简单工厂代码

 

public class ShapeFactory {

    public Shape getShape(String shapeType){

        if(shapeType.equalsIgnoreCase("circle")){
            return new Circle();
        }else if(shapeType.equalsIgnoreCase("rectangle")){
            return new Rectangle();
        }else if(shapeType.equalsIgnoreCase("squere")){
            return new Squere();
        }
        return null;
    }

}

 

工厂模式代码

public abstract class ShapeFactory {
    public abstract Shape getShape();
}

public class CircleFactory extends ShapeFactory {
    @Override
    public Shape getShape() {
        return new Circle();
    }
}

public class RectangleFactroy extends ShapeFactory {
    @Override
    public Shape getShape() {
        return new Rectangle();
    }
}

抽象工厂

/**
 * 手机产品接口
 */
public interface IPhoneProduct {
    void start();
    void shutdown();
    void callUp();
    void sendSMS();
}

/**
 * 路由器产品接口
 */
public interface IRouterProduct {

    void start();
    void shutdown();
    void openWifi();
    void setting();
}

/**
 * 抽象产品工厂(定义了同一个产品族的产品生产行为)
 */
public interface IProductFactory {
    IPhoneProduct produceTelPhone();
    IRouterProduct produceRouter();
}

/**
 * 华为手机产品
 */
public class HuaweiPhone implements IPhoneProduct {
    @Override
    public void start() {
        System.out.println("开启华为手机");
    }

    @Override
    public void shutdown() {
        System.out.println("关闭华为手机");
    }

    @Override
    public void callUp() {
        System.out.println("用华为手机打电话");
    }

    @Override
    public void sendSMS() {
        System.out.println("用华为手机发短信");
    }
}

/**
 * 华为路由器产品
 */
public class HuaweiRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("启动华为路由器");
    }

    @Override
    public void shutdown() {
        System.out.println("关闭华为路由器");
    }

    @Override
    public void openWifi() {
        System.out.println("打开华为路由器的wifi功能");
    }

    @Override
    public void setting() {
        System.out.println("设置华为路由器参数");
    }
}

/**
 * 小米手机产品
 */
public class XiaomiPhone implements IPhoneProduct {
    @Override
    public void start() {
        System.out.println("开启小米手机");
    }

    @Override
    public void shutdown() {
        System.out.println("关闭小米手机");
    }

    @Override
    public void callUp() {
        System.out.println("用小米手机打电话");
    }

    @Override
    public void sendSMS() {
        System.out.println("用小米手机发短信");
    }
}

/**
 * 小米路由器产品
 */
public class XiaomiRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("启动小米路由器");
    }

    @Override
    public void shutdown() {
        System.out.println("关闭小米路由器");
    }

    @Override
    public void openWifi() {
        System.out.println("打开小米路由器的wifi功能");
    }

    @Override
    public void setting() {
        System.out.println("设置小米路由器参数");
    }
}

/**
 * 华为产品工厂
 */
public class HuaweiProductFactory implements IProductFactory{
    @Override
    public IPhoneProduct produceTelPhone() {
        System.out.println(">>>>>>生产华为手机");
        return new HuaweiPhone();
    }

    @Override
    public IRouterProduct produceRouter() {
        System.out.println(">>>>>>生产华为路由器");
        return new HuaweiRouter();
    }

    @Override
    public IComputer produceComput() {
        return null;
    }
}

/**
 * 小米产品工厂
 */
public class XiaomiProductFactory implements IProductFactory {
    @Override
    public IPhoneProduct produceTelPhone() {
        System.out.println(">>>>>>生产小米手机");
        return new XiaomiPhone();
    }

    @Override
    public IRouterProduct produceRouter() {
        System.out.println(">>>>>>生产小米路由器");
        return new XiaomiRouter();
    }

    @Override
    public IComputer produceComput() {
        return null;
    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工厂模式是一种软件设计模式,用于创建对象。在Python中,可以使用工厂模式来封装对象的创建过程,并且可以在运行时动态地切换不同的对象实现。 工厂模式包括抽象工厂角色、具体工厂角色和产品角色三个主要组成部分。 抽象工厂角色是一个抽象的类或接口,定义了一个或多个创建产品的方法。在Python中,通常使用ABCMeta元类和abstractmethod装饰器来定义抽象基类和抽象方法。 具体工厂角色是抽象工厂角色的具体实现,实现了抽象工厂角色的创建产品的方法。 产品角色是具体工厂角色创建的对象,它们共同实现了同一个接口或继承了同一个父类。 在示例中,我们可以看到具体工厂角色的代码示例。其中,AliFactory、HuabeiFactory和WechatFactory分别实现了create_payment方法,并返回了对应的支付对象。这些具体工厂角色都继承自抽象工厂角色PaymentFactory,而PaymentFactory中定义了抽象方法create_payment。 通过使用工厂模式,我们可以封装对象的创建过程,提高代码的灵活性和可维护性。当需要创建不同的对象时,我们只需要调用对应的具体工厂角色来创建对象,而不需要直接实例化具体的产品角色。 综上所述,工厂模式是一种通过抽象工厂角色和具体工厂角色来封装对象创建过程的设计模式,可以实现对象的动态切换和解耦。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [23种Python设计模式之工厂方法模式详解](https://blog.csdn.net/weixin_51098806/article/details/123917610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值