JAVA-----23种设计模式之-----工厂模式

1.23种模式简介

创建型模式:
– 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。
结构型模式:
–适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模 式。
行为型模式:
– 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模 式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

2.工厂模式

2.1工厂模式:
实现了创建者和调用者的分离。
     – 详细分类:
              • 简单工厂模式: 用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已 有代码)
              • 工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品)
              • 抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持 增加产品族)
2.2核心本质:
    – 实例化对象,用工厂方法代替new操作。
    – 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实 现类解耦。

3.简单工厂模式

要点:
    – 简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
    – 对于增加新产品无能为力!不修改代码的话,是无法扩展的。

public class CarFactory {
		public static Car createCar(String type){
			Car c = null;
			if("奥迪".equals(type)){
				c  = new Audi();
			}else if("奔驰".equals(type)){
				c = new Benz();
			}
			return c;
		}
}
public class CarFactory {
	public static Car createAudi(){
		return new Audi();
	}
	public static Car createBenz(){
		return new Benz();
	}
}

4.工厂方法模式

要点:工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目 或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。

题目: 创建一个Cycle接口及其Unicycle、Bicycle和Tricycle实现。对每种类型的Cycle都创建相应的工厂,然后编写代码使用这些工厂。工厂产生的对象能够被管理,可以输出当前产生的对象总数。
代码:

package homework.home2;

import java.util.Random;

/**
 * @ClassName: Client
 * @Description: TODO
 * @Author a fish who is lonely
 * @Date: 2021/4/9 15:21
 * @QQ号:1929618793
 * @Version 1.0
 */

public class Client {
    public static void main(String[] args) {

        Random r = new Random();
        UnicycleFactory unicycleFactory = new UnicycleFactory();
        BicycleFactory bicycleFactory = new BicycleFactory();
        TricycleFactory tricycleFactory = new TricycleFactory();
        //随机产生不同的对象一定的数量,直接new也行,方式不一样
        for (int i = 0; i <100; i++) {
            int random=r.nextInt(100);
            switch (random%3){
                case 0:unicycleFactory.createCycle();break;
                case 1:bicycleFactory.createCycle();break;
                case 2:tricycleFactory.createCycle();break;
                default:
            }
        }
        try {
            //反射获取三个类的对象
            Unicycle unicycle = Unicycle.class.getDeclaredConstructor().newInstance();
            Bicycle bicycle = Bicycle.class.getDeclaredConstructor().newInstance();
            Tricycle tricycle = Tricycle.class.getDeclaredConstructor().newInstance();
            unicycle.count() ;
            bicycle.count() ;
            tricycle.count() ;
            //总共的对象数量为103个
            System.out.println("合计各个Cycle对象的数量为:" + (Unicycle.getCountUnicycle() + Bicycle.getCountBicycle() + Tricycle.getCountTricycle()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

interface Cycle{
    void count();
}
class Unicycle implements Cycle{
   private  static int countUnicycle=0;
   public Unicycle(){
       countUnicycle++;
   }
    @Override
    public void count() {
        System.out.println("Unicycle对象当前数量:"+countUnicycle);
    }

    public static int getCountUnicycle() {
        return countUnicycle;
    }
}
class Bicycle implements  Cycle{
    private  static int countBicycle=0;
    public Bicycle() {
        countBicycle++;
    }

    @Override
    public void count() {
        System.out.println("Bicycle对象当前数量:"+countBicycle);
    }

    public static int getCountBicycle() {
        return countBicycle;
    }
}
class Tricycle implements  Cycle{
    private  static int countTricycle=0;

    public Tricycle() {
        countTricycle++;
    }

    @Override
    public void count() {
        System.out.println("Tricycle对象当前数量:"+countTricycle);
    }

    public static int getCountTricycle() {
        return countTricycle;
    }
}


interface  CycleFactory{
    Cycle createCycle();
}

class  UnicycleFactory implements  CycleFactory{
    @Override
    public Cycle createCycle() {
        return  new Unicycle();
    }
}
class  BicycleFactory implements  CycleFactory{
    @Override
    public Cycle createCycle() {
        return  new Bicycle();
    }
}
class  TricycleFactory implements  CycleFactory{
    @Override
    public Cycle createCycle() {
        return  new Tricycle();
    }
}

5.抽象工厂模式

要点:
    -用来生产不同产品族的全部产品。(对于增加新的产品,无能为力; 支持增加产品族)
    -抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务 分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式

6.应用场景

在这里插入图片描述
此图来自尚硅谷教育!
其他设计模式,以后接触到了会慢慢更新的哦(⊙~⊙)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值