美文网首页
23种模式-工厂模式

23种模式-工厂模式

作者: 大白乐了 | 来源:发表于2019-08-22 21:46 被阅读0次

推荐非常好的文章: https://www.jianshu.com/p/38493eb4ffbd
贴下自己的代码:

import org.junit.Test;

/**
 * 三种工厂方式总结:
 * 1. 对于固定产品和类是确定的,推荐简单工厂。
 * 2. 对于一系列、大批量的对象生产,推荐使用抽象工厂。
 */
public class TestFactory {

    /**
     * 简单工厂
     * 角色:
     * 工厂类
     * 产品抽象类(接口)
     * 具体产品类
     *
     * 优点: 对象与使用者解耦
     * 缺点: 违反开闭原则
     */
    @Test
    public void testSimpleFactory(){
        FruitFactory fruitFactory = new FruitFactory();
        // 获得apple对象
        Apple apple = (Apple) fruitFactory.createFruit("apple");
        // 获得苹果对象
        Pear pear = (Pear) fruitFactory.createFruit("pear");
    }

    /**
     * 工厂方法模式
     * 角色:
     *  工厂抽象类(接口)
     *  具体工厂类
     *  产品抽象类(接口)
     *  具体产品类
     *
     * 优点: 解耦 遵从开闭原则
     * 缺点: 代码多
     */
    @Test
    public void testFactoryMethod(){
       AppleFactory appleFactory = new AppleFactory();
       PearFactory pearFactory = new PearFactory();
        // 获得apple对象
       Apple apple = (Apple)appleFactory.createFruit();
        // 获得苹果对象
       Pear pear = (Pear)pearFactory.createFruit();
    }

    /**
     * 抽象工厂
     * 定义: 以组为单位
     * 角色: 和工厂方法一样
     * 抽象工厂和工厂方法的模式基本一样,区别在于,工厂方法是生产一个具体的产品,而抽象工厂可以用来生产一组相同,有相对关系的产品;
     * 重点在于一组,一批,一系列;
     * 例如:生产小米手机,小米手机有很多系列,小米note,红米note等;
     * 假如小米note需要的配件有825的处理器,6英寸屏幕,而红米只需要650的处理器和5寸屏幕
     * 这个案例使用抽象工厂比较合适。
     */
    @Test
    public void testAbstractFctory(){
        PhoneFactory xiaomiFactory = new XiaoMiFactory();
        PhoneFactory hongmiFactory = new HongMiFactory();
        xiaomiFactory.getCpu().run();
        hongmiFactory.getCpu().run();
    }

}
/**
 * 抽象接口
 */
public interface Fruit {

    void whatIm();
}

/**
 * 具体实现类 apple
        */
public class Apple implements Fruit {
    @Override
    public void whatIm() {
        System.out.println("apple ...");
    }
}

/**
 * 具体实现类 pear
 */
public class Pear implements Fruit {
    @Override
    public void whatIm() {
        System.out.println("pear ...");
    }
}

/********************************简单工厂***********************************/
/**
 * 简单工厂
 * 优点: 解耦
 * 缺点: 违反开闭原则(新增Fruit,需要修改代码)
 * 应用场景: 产品的分类和名称相对固定,推荐使用简单工厂。
 */
public class FruitFactory {

    public Fruit createFruit(String type) {
        switch (type) {
            case "apple":
                return new Apple();
            case "pear":
                return new Pear();
        }
        return null;
    }
}

/********************************工厂方法***********************************/
public interface FruitFactoryMethod {

    // 生产水果
    Fruit createFruit();
}

public class AppleFactory implements FruitFactoryMethod {
    @Override
    public Fruit createFruit() {
        return new Apple();
    }
}

public class PearFactory implements FruitFactoryMethod {
    @Override
    public Fruit createFruit() {
        return new Pear();
    }
}

/********************************抽象工厂***********************************/
/**
 * cpu 接口 和 实现类
 */
public interface Cpu {

    void run();


    class Cpu650 implements Cpu {
        @Override
        public void run() {
            System.out.println("cpu 650");
        }
    }

    class Cpu825 implements Cpu {
        @Override
        public void run() {
            System.out.println("cpu 825");
        }
    }
}

public interface Screen {

    void size();

    class Screen5 implements Screen {
        @Override
        public void size() {
            System.out.println("screen size 5");
        }
    }

    class Screen6 implements Screen {
        @Override
        public void size() {
            System.out.println("screen size 6");
        }
    }
}

public interface PhoneFactory {

    /**
     * 获取cpu型号
     * @return
     */
    Cpu getCpu();

    /**
     * 获取屏幕尺寸
     * @return
     */
    Screen getScreen();
}

public class XiaoMiFactory implements PhoneFactory {
    @Override
    public Cpu getCpu() {
        // 高性能处理器
        return new Cpu.Cpu825();
    }

    @Override
    public Screen getScreen() {
        // 6寸大屏
        return new Screen.Screen6();
    }
}

public class HongMiFactory implements PhoneFactory {
    @Override
    public Cpu getCpu() {
        // 高效处理器
        return new Cpu.Cpu650();
    }

    @Override
    public Screen getScreen() {
        // 小屏手机
        return new Screen.Screen5();
    }
}

相关文章

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • 设计模式 工厂模式

    工厂模式 工厂模式三大类1、简单工厂模式(静态工厂方法模式)2、工厂方法模式3、抽象工厂模式(Kit模式) 简单工...

  • 工厂模式-简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式 工厂模式是一种比较常见的创建型设计模式,分为简单工厂模式、工厂方法模式、抽象工厂模式 工厂模式旨在把对象...

  • php设计模式之工厂模式

    1. 工厂模式分类 工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式; 2. 简单工厂模式 又...

网友评论

      本文标题:23种模式-工厂模式

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