工厂模式

来源:互联网 发布:sql like 多个条件 编辑:程序博客网 时间:2024/05/29 07:38

创建对象的常见方式就是使用new操作符,然而通过new操作符来实例化对象是典型的针对实现编程。典型的使用接口来接受实例化对象的代码如下:

Fruit fruit=new Apple();

像这样公开进行实例化对象的过程正是产生程序耦合的重要原因之一。

然而创建对象的过程却不仅仅只有使用new操作符这一种,使用工厂模式能够实现在实例化对象的过程中解耦。工厂模式又分为三种实现方式,分别是:简单工厂模式、工厂方法模式和抽象工厂模式。

简单工厂模式,又叫静态工厂方法(static factory method)模式。简单工厂模式就是由一个工厂类根据传入的参数决定创建哪一种的产品类。

其中有4个角色:
1.工厂类角色:是具体产品类角色直接调用者。
2.抽象产品角色:接口或抽象类,负责具体产品角色的定义,及与客户端的交互。
3.具体产品角色:被工厂类创建的对象,也是客户端实际操作对象。
4.客户端:调用工厂类产生实例,并调用实例的方法进行相应工作。

定义接口与实现类:

public interface Fruit {    void eat();}public class Apple implements Fruit {    public void eat() {        System.out.println("吃苹果");    }}public class Banana implements Fruit {    public void eat() {        System.out.println("吃香蕉");    }}public class Litchi implements Fruit {    public void eat() {        System.out.println("吃荔枝");    }}public class Orange implements Fruit {    public void eat() {        System.out.println("吃橘子");    }}

定义工厂类和调用的客户端:

public class FruitFactory {    public static Fruit createFruit(String type){        switch (type) {        case "apple":            return new Apple();        case "banana":            return new Banana();        case "litchi":            return new Litchi();        case "orange":            return new Orange();        default:            return null;        }    }}public class FactoryTest {    public static void main(String[] args) {        Fruit fruit=FruitFactory.createFruit("apple");        fruit.eat();    }}

工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。工厂方法模式是对简单工厂模式的抽象,也属于模板方法模式。

其中有5个角色:
1.工厂接口:工厂接口是工厂方法模式的核心,与调用者直接交互用来提供产品。
2.工厂实现:在编程中,工厂实现决定如何实例化产品,是实现扩展的途径,需要有多少种产品,就需要有多少个具体的工厂实现。
3.抽象产品角色:接口或抽象类,负责具体产品角色的定义,及与客户端的交互。
4.具体产品角色:被工厂类创建的对象,也是客户端实际操作对象。
5.客户端:调用工厂类产生实例,并调用实例的方法进行相应工作。

简而言之:抽象工厂生产抽象产品,实体工厂生产实体产品。针对于不同的实体产品有不同的工厂。
仅以其中的一种水果作为示例:

public interface IFruitFactory {    Fruit createFruit();}public class AppleFactory implements IFruitFactory {    @Override    public Fruit createFruit() {        return new Apple();    }}public class FactoryTest {    public static void main(String[] args) {        IFruitFactory factory=new AppleFactory();        Fruit fruit=factory.createFruit();        fruit.eat();    }}

抽象工厂模式是工厂方法模式的升级版,工厂方法中的每一具体的工厂类负责生产一种对应的产品。而抽象工厂模式中的一个具体的工厂类负责的是生产一个产品线上的一个或多个产品。相对来说,抽象工厂模式不易扩展商品,但是易扩展生产商品线的工厂类。

public interface IFruitFactory {    Fruit createApple();    Fruit createBanana();    Fruit createLitchi();    Fruit createOrange();}public class FruitFactory implements IFruitFactory {    @Override    public Fruit createApple() {        return new Apple();    }    @Override    public Fruit createBanana() {        return new Banana();    }    @Override    public Fruit createLitchi() {        return new Litchi();    }    @Override    public Fruit createOrange() {        return new Orange();    }}public class FactoryTest {    public static void main(String[] args) {        IFruitFactory factory=new FruitFactory();        Apple apple=(Apple) factory.createApple();        apple.eat();    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 穿书后,我刷错了反派的好感度 摄政王怀里的团宠美人娇又软 满级千金不想掉马 女帝她就是个卖药的! 华娱激荡年代 她来看我的演唱会 快穿:娇养反派大佬做替身 不努力种田就要和相公继承皇位了 穿书末世之我是金手指 转生恶少后的魔幻日常 穿书后我成了反派男二的铁血妈粉 带着超市重返年代 新婚夜,我被冷冰冰的王爷读心了 修仙女配拿了反派剧本 影后的假面童话 克死前夫后我成了心软的神 新婚夜,我治好了失明太子的隐疾 沦陷野玫瑰 完球!我的崽居然是反派 重生后她被憨憨相公娇宠了 师祖回归,徒弟各个是疯批大佬 植物人老公苏醒后,她只想逃 他怎么可能是魔尊 农家小团宠:带着空间撩大佬 快穿做个好婆婆 医路芳华 满级真千金:一品女法医 惊!举重妖精被电竞奶狗缠上了 团宠小农女:带着功德空间去逃荒 被迫快穿后我只想当咸鱼 顶流影帝竹马来讨债 穿越后,太子妃靠种田轰动全京城 高考结束后我和死对头HE了 掉马后满级大佬被迫在热搜上开挂 农门悍妻:黑心莲夫君求抱抱 今日宜婚 嗜酒成瘾 肆意诱哄 快穿之反派女配是bug 落水后,我抢了未来首辅的婚! 玄学大佬在八零年代暴富了!