设计模式第三天 工厂模式

工厂模式通常是我们在做项目时用到最多的设计模式。工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式;

学习工厂模式,首先需要理解其三大角色:工厂角色(核心),抽象产品角色,具体产品角色。

先说简单工厂模式:类图如下:



贴上代码:

抽象产品(手机)

public abstract class Phone {
    public abstract void telephone();
    public abstract void sendMsg();
}

具体产品(小米、苹果、诺基亚)

public class Xiaomi  extends Phone{

    public void telephone() {
    }
    public void sendMsg() {
    }
    public void miui(){
        System.out.println("------超一流的用户体验-------");
    }
}

public class Apple extends Phone{
    public void telephone() {
    }
    public void sendMsg() {
    }
    public void music(){
        System.out.println("---------还有谁比我音质更好?---------");
    }
}

public class Nokia  extends Phone{
    public void telephone() {
    }
    public void sendMsg() {
    }
}

//手机工厂

public class Fushikang{

    public static Phone CreatePhone(String type){
        Phone phone = null;
        if("xiaomi".equals(type)){
            phone = new Xiaomi();
        }
        if("apple".equals(type)){
            phone = new Apple();
        }
        if("nokia".equals(type)){
            phone = new Nokia();
        }
        return phone;
    }
    public static void main(String[] args) {
        Xiaomi xiaomi = (Xiaomi) Fushikang.CreatePhone("xiaomi");
        xiaomi.miui();
        Apple apple = (Apple) Fushikang.CreatePhone("apple");
        apple.music();
    }
}

现在回过头来,看这三种角色:Phone(手机)是一个抽象类,传统的手机,只有打电话、发短信的功能,诺基亚在造传统的手机、小米和苹果则在原来的电话的基础上进行创新,加入更多的元素。但是它们都有一个共性,就是只管设计,不管制造。都交给了富士康了,呵呵;它们设计好手机后对富士康(工厂类)发出制造手机的请求,发送订单(type),富士康接到订单后开始生产手机(具体产品)。

但是这里就会有一个问题,什么问题呢,就是所有的手机都在富士康一家生产,这样富士康就有了绝对的话语权,哪一天富士康罢工了:结果所有的手机厂商都悲催了……随着越来越多的公司开始设计手机,魅族、酷派、乐视、360、格力、美的、TCL……订单越来越多,富士康只能不停的扩大规模,上马新的生产线,招收越来越多的员工,然后一系列的事件……终于所有人都无法忍耐了,于是开始商讨新的解决方案,商量的结果就是进行改革,让多家工厂来生产,每个公司负责制造一种手机。于是有了下面的“工厂方法模式”。



工厂方法模式:定义一个创建对象的接口,有子类决定创建哪个类的实例。


有类图看,我们会发现,工厂方法模式比原来的简单工厂模式多了一个角色(抽象工厂角色)

现在工厂变成了父类,不再具体生成手机了,而是把生产的任务交给了它的子公司去生产。这样就分流了原来的生产任务,富士康停电了,英飞达的工厂照常运行。

抽象工厂模式:是所有形态的工程模式中最为抽象和最具一般性的一种形态,可以向客户端提供一个接口,是的客户端可以在不指定产品的类型的情况下,创建多个产品组中的产品对象。



抽象工厂模式和工厂方法模式,初看起来十分相似,其实也确实非常相似,呵呵。所不同处在于:

1.工厂方法模式:针对一个产品等级结构,只有一个抽象产品类;而抽象工厂模式:针对一系列的产品等级结构,应对的是产品族概念即:应对的是产品族概念,有多个抽象产品类。


在工厂模式下,客户端只需要关注制造哪种手机,而在抽象工厂模式下,客户端则需要关注制造国内版的还是欧美版的手机。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值