设计模式 ---- 工厂模式

来源:互联网 发布:java常用的分布式框架 编辑:程序博客网 时间:2024/05/29 14:14
俗话说好记性不如烂笔头,今日有空总结一下工厂模式,就当加深一下理解。

1、 工厂模式是什么,有什么用?

 工厂模式就是利用工厂来创建对象,客户自己不用直接创建对象,而是利用工厂来创建对象。

2、工厂模式分类

简单工厂模式工厂方法模式抽象工厂模式简单工厂模式可以看做工厂方法模式的一个特例,而抽象方法模式相当于工厂方法模式在维度上的一个扩展。

3、 工厂方法模式

工厂方法模式的要点:    抽象工厂和具体工厂    抽象产品和具体产品    抽象工厂生产抽象产品,具体工厂生产具体产品以手机生产商作为例子分析工厂方法:    抽象工厂和具体工厂:手机工厂和苹果手机工厂、索尼手机工厂以及三星手机工厂    抽象产品和具体产品:手机和苹果手机,索尼手机以及三星手机    抽象工厂生产抽象产品,具体工厂生产具体产品:手机工厂生产手机,苹果工厂造苹果手机...

代码:

//客户类public class FactoryClient{    public static void main(String[] args){        PhoneFactory factory1 = new IphoneFactory();        Phone phone1 = factory1.createPhone();        phone1. phoneMessage();        PhoneFactory factory2 = new SonyFactory();        Phone phone2 = factory2.createPhone();        phone2. phoneMessage();        PhoneFactory factory3 = new SamsungFactory();        Phone phone3 = factory3.createPhone();        phone3. phoneMessage();    }}//抽象工厂 ===> 生产抽象手机interface PhoneFactory{    Phone createPhone();}//具体工厂 ====>生产具体手机class IphoneFactory implements PhoneFactory{    public Phone createPhone(){        return new Iphone();    }}class SonyFactory implements PhoneFactory{    public Phone createPhone(){        return new SonyPhone();    }}class SamsungFactory implements PhoneFactory{    public Phone createPhone(){        return new SamsungPhone();    }}//抽象产品 ====> 抽象信息interface Phone{    void phoneMessage();}//具体产品 ====> 具体信息class Iphone implements Phone{    public void phoneMessage(){        System.out.println("you need to sell your kidney to own me!");    }}class SonyPhone implements Phone{    public void phoneMessage(){        System.out.println("sony is very good!");    }}class SamsungPhone implements Phone{    public void phoneMessage(){        System.out.println("I am starstarstar");    }}

4、简单/静态工厂模式

对于以上设计模式进行简化,让一个万能的工厂可以生产上述三种手机,即变成了简单工厂模式。创建方法为静态方法,即客户也不需要创建这个工厂
class PhoneFactory{    public static Phone createPhone(int type){        switch(type){            case 1:                return new Iphone();                break;            case 2:                return new SonyPhone();                break;            case 3:                return new SamsungPhone();                break;            defaut:                return null;        }    }}

5、抽象工厂模式

抽象工厂模式涉及到的产品具有两个维度:即产品族和等级结构。关于等级结构和产品族的概念可以这样理解:以sony手机为例旗下有高端机型(以前是Xperia Z系列)和中端机型(Xperia M系列),这个可以认为是等级结构。而高端机型中有大屏和小屏之分(例如:Z5 和 Z5 mini)这可以认为是一个产品族。抽象工厂模式的要点:与工厂方法类似,不同的是,由于有两个维度的,需要制作两条生产线,相对复杂一些
/***以sony 生产手机为例*高端旗舰机型为Z系列,而中端一般机型为M系列,由此构成产品等级*大屏手机不带mini 和  小屏幕手机带mini构成一个产品族(可能真实情况是并没有M5 mini)*///客户public class AbstractFactoryClient{    public static void main(String[] args){        //不同大小手机的生产线        SonyFactory factoryBig = new BigFactory();        SonyFactory factorySmall = new SmallFactory();        //开始造手机        System.out.println("------Z5-------");        SonyPhone sony1 = factoryBig.createZseries();        sony1.level();        sony1.size();        System.out.println("------M5-------");        SonyPhone sony2 = factoryBig.createMseries();        sony2.level();        sony2.size();        System.out.println("------Z5mini-------");        SonyPhone sony3 = factorySmall.createZseries();        sony3.level();        sony3.size();        System.out.println("------M5mini-------");        SonyPhone sony4 = factorySmall.createMseries();        sony4.level();        sony4.size();    }}//sony 手机接口,等级,和大小信息  等级结构和产品族两个维度interface SonyPhone{    void level();    void size();}//以等级作为抽象类,用大小也是可以的abstract class Zseries implements SonyPhone{    public void level(){        System.out.println("I am luxury!");    }    public abstract void size();}abstract class Mseries implements SonyPhone{    public void level(){        System.out.println("I am low!");    }    public abstract void size();}//四个具体实现类class Z5 extends Zseries{    public void size(){        System.out.println("I am big!");    }}class Z5mini extends Zseries{    public void size(){        System.out.println("I am small!");    }}class M5 extends Mseries{    public void size(){        System.out.println("I am big!");    }}class M5mini extends Mseries{    public void size(){        System.out.println("I am small!");    }}//工厂接口interface SonyFactory{    Zseries createZseries();    Mseries createMseries();}//具体工厂生产线class BigFactory implements SonyFactory{    public Zseries createZseries(){        return new Z5();    }    public Mseries createMseries(){        return new M5();    }}class SmallFactory implements SonyFactory{    public Zseries createZseries(){        return new Z5mini();    }    public Mseries createMseries(){        return new M5mini();    }}

6、总结

抽象工厂和具体工厂抽象产品和具体产品抽象工厂生产抽象产品,具体工厂生产具体产品根据工厂方法模式可以扩充或者缩减到另外两个模式
1 0
原创粉丝点击