美文网首页
一、工厂设计模式

一、工厂设计模式

作者: 奔跑吧老王 | 来源:发表于2020-03-30 16:36 被阅读0次

工厂设计模式分为

  • 简单工厂
  • 工厂方法
  • 抽象工厂

    简单工厂

违背开闭原则,一旦调用处有修改,需要修改的地方较多,且违背开闭原则;

工厂方法

### 抽象水果类
public abstract class Fruit {

    private String name;

    abstract String placeOfOrign(String orign);

    public void fruitName(){
        System.out.println(name);
    }
    public void desc(){
        System.out.println(name +"是圆的!!!");
    }
}
### 具体实现类
public class ShanDongApple extends Fruit {

    @Override
    String placeOfOrign(String origin) {
        super.setName("山东苹果");
        return this.getName();
    }
}
### 具体实现类
public class ShanDongPear extends Fruit {

    @Override
    String placeOfOrign(String origin) {
        super.setName("山东梨");
        return this.getName();
    }
}
### 具体实现类
public class BeiJingApple extends Fruit {

    @Override
    String placeOfOrign(String origin) {
        super.setName("北京苹果");
        return this.getName();
    }
}
### 具体实现类
public class BeiJingPear extends Fruit {

    @Override
    String placeOfOrign(String origin) {
        super.setName("北京梨");
        return this.getName();
    }
}
### 子类工厂类
public class BeiJingFruit extends FruitFactory {

    private String typeName;
    @Override
    Fruit creatFruit() {
        Fruit fruit=null;
        if("apple".equals(typeName)){
             fruit = new BeiJingApple();
        }else {
             fruit = new BeiJingPear();
        }
        return fruit;
    }
}
### 子类工厂类
public class ShanDongFruit extends FruitFactory {

    private String typeName;
    @Override
    Fruit creatFruit() {
        Fruit fruit=null;
        if("apple".equals(typeName)){
             fruit = new ShanDongApple();
             fruit.setName(typeName);
        }else {
             fruit = new ShanDongPear();
            fruit.setName(typeName);
        }
        return fruit;
    }
}
###工厂顶级类
public abstract class FruitFactory {

    abstract  Fruit creatFruit();

    public void sellerFruit(){
        Fruit fruit = creatFruit();
        fruit.fruitName();
        fruit.desc();
    }
}
### 调用处
public class FruitShop {

    public static void main(String[] args) {
        ShanDongFruit shanDongFruit = new ShanDongFruit();
        shanDongFruit.setTypeName("hhh");
        shanDongFruit.sellerFruit();
    }
}

类图:

image.png

对工厂方法进行简要分析:

在调用处可能有多处调用,如果需要增加一个水果种类的话,不采用工厂方法模式,需要在调用处进行多处修改,且存在漏该的可能性,采用工厂方法只需要修改子类工厂即可,根据TypeName进行适配模式匹配,可以做到最小粒度的修改。

相关文章

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

网友评论

      本文标题:一、工厂设计模式

      本文链接:https://www.haomeiwen.com/subject/qktguhtx.html