02- 工厂模式:

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() ;

工厂模式也是用来创建实例对象的且具有更大的可扩展性和尽量少的修改量。

工厂模式定义
【通常我们都要在创建sample实例时一般是用new ,但是如果创建对象的同时要进行初始化的工作,且不是简单赋值 ,查询数据库,是有很长一段代码操作,new 中的构造函数是没办法满足。如果非写入构造函数中,也是有悖于Java[面向对象的原则,但是如果利用工厂模式,将代码“封装”起来(减少段和段之间耦合联系性),这样会降低代码耦合 提高代码服用。】


下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。

1.简单工厂模式

简单工厂模式:简而言之,就是有一个专门生产某个产品的类。

比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。


/** @create: 2020-02-15 22:20
 * 简单工厂模式
 **/
public class SimpleFactory {
    public static void main(String[] args) {
        Car  car1 = (Car)Factory.get("奥迪");
        car1.create();
        Car  car2 = (Car)Factory.get("宝马");
        car2.create();
    }
}
//生产车的工厂
class Factory {
    public static Object get(String carType) {
        Car car =null;
        if (carType.equals("奥迪")) {
            car = new Aodi();
        } else if (carType.equals("宝马")) {
            car = new Baoma();
        }
        return car;
    }
}
//奥迪车的类
class Aodi implements Car{
    @Override
    public void create() {
        System.out.println("生产奥迪");
    }
}
//宝马车的类
class Baoma implements Car{
    @Override
    public void create() {
        System.out.println("生产宝马");
    }
}
//汽车的接口
interface Car {
    void create();
}

2.工厂模式

工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。
戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。
生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。
后续直接调用鼠标工厂.生产鼠标()即可

/**工厂方法模式
 **/
public class MethodFactoryTest {
    public static void main(String[] args) {
        //需要生产奔驰就调用奔驰车的工厂
        Aotuo aotuo = AotuoFactory.Create();
        aotuo.Run();
        //需要生产奥拓就调用生产凹凸车的工厂
        Benchi benchi = BenchiFactory.Create();
        benchi.Run();
    }

}
//创建一个接口
interface Cars{
   void  Run();
}
//生产奥拓车的工厂
class AotuoFactory {
    public static Aotuo Create() {
        return new Aotuo();
    }

}
//生产奔驰车的工厂
class BenchiFactory {
    public static Benchi Create() {
         return new Benchi() ;
    }
}

class Aotuo implements Cars{
    @Override
    public void Run() {
        System.out.println("生产奥拓");
    }
}
class Benchi implements Cars{
    @Override
    public void Run() {
        System.out.println("生产奔驰");
    }
}

3.抽象工厂模式

抽象工厂模式也就是不仅生产鼠标,同时生产键盘。
也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。
戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。
创建工厂时,由戴尔工厂创建。
后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。

3-1 .在抽象工厂模式中,假设我们需要增加一个工厂

假设我们增加华硕工厂,则我们需要增加华硕工厂,和戴尔工厂一样,继承 PC 厂商。
之后创建华硕鼠标,继承鼠标类。创建华硕键盘,继承键盘类即可。


3-2 .在抽象工厂模式中,假设我们需要增加一个产品

假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。
之后在PC厂商这个父类中,增加生产耳麦的接口。最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。 以上。


/**
 * 抽象工厂模式
 **/
public class AbstractFactory {
    public static void main(String[] args) {
        DaierKebo daierKebo = DaierFactory.CreateKebo();
        daierKebo.click();
        DaierMouse daierMouse = DaierFactory.CreateMouse();
        daierMouse.Run();
        HuibuKebo huibuKebo = HuibuFactory.CreateKebo();
        huibuKebo.click();
        HuipuMouse huipuMouse = HuibuFactory.CreateMouse();
        huipuMouse.Run();
        LianxiangKebo lianxiangKebo = LianxiangFactory.CreateKebo();
        lianxiangKebo.click();
        LianxiangMouse lianxiangMouse = LianxiangFactory.CreateMouse();
        lianxiangMouse.Run();
    }
}

//生产鼠标和接口 和生产键盘的接口
interface  Mouse{
    void Run();
}
interface Kebo{
    void click();
}

//接口的实现类惠普 和戴尔
class DaierMouse implements  Mouse{
    @Override
    public void Run() {
        System.out.println("生产戴尔的鼠标");
    }
}
class HuipuMouse implements  Mouse{
    @Override
    public void Run() {
        System.out.println("生产惠普的鼠标");
    }
}

class DaierKebo implements  Kebo{
    @Override
    public void click() {
        System.out.println("生产戴尔的键盘");
    }
}
class HuibuKebo implements  Kebo{
    @Override
    public void click() {
        System.out.println("生产惠普的键盘");
    }
}

//戴尔 和惠普的工厂
class DaierFactory{
   public static  DaierMouse CreateMouse(){
        return new DaierMouse();
    }
    public static  DaierKebo CreateKebo(){
        return new DaierKebo();
    }
}
class  HuibuFactory{
    public static  HuipuMouse CreateMouse(){
        return new HuipuMouse();
    }
    public static  HuibuKebo CreateKebo(){
        return new HuibuKebo();
    }
}

//增加一个联想公司
class LianxiangMouse implements  Mouse{
    @Override
    public void Run() {
        System.out.println("生产联想鼠标");
    }
}
class  LianxiangKebo implements Kebo{
    @Override
    public void click() {
        System.out.println("生产联想键盘");
    }
}
class LianxiangFactory {
    public static LianxiangMouse CreateMouse(){
        return new LianxiangMouse();
    }
    public static  LianxiangKebo CreateKebo(){
        return new LianxiangKebo();
    }
}
由此可见,工厂方法确实为系统结构提供了非常灵活强大的动态扩展机制,只要我们更换一下具体的工厂方法,系统其他地方无需一点变换,就有可能将系统功能进行改头换面的变化。

————————————————
版权声明:本文为CSDN博主「openstack_developer」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wqwqwqwq403/article/details/89043234

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容