java 常用设计模式(工厂设计模式)

什么是工厂设计模式:

        所谓工厂就是批量生产相同的产品(红色),假设有100个,分别用到100个地方,现在改变需求了,客户需要用绿色的,那么,你不能每个地方分别new绿色的产品吧,只需要把工厂加的调料变成绿色的就可以了,然后送往各地的颜色就是绿色的了.

工厂模式分为三种:简单工厂(静态工厂模式),工厂方法,抽象工厂模式

1.简单工厂模式:假设我们有两种颜料,红和绿,在工厂放入什么颜色就产生什么颜色的车,首先我们以面相对象得思想分析一下,因为工厂只产车,所以我只要抽象一个车的接口就可以了,至于什么颜色是后来(传递参数决定)决定的,然后在根据你的颜色创建不同的车,车都是有颜色的,需要什么颜色的车实现这个接口就可以了接口.

public interface Car {
	void color();
}

public class RedCar implements Car {
	@Override
	public void color() {
		System.out.println("我是红色的车");

	}

}

public class GreenCar implements Car {
	@Override
	public void color() {
		System.out.println("我是绿色的车");

	}

}

public class CarFactory {
	public static Car greatCar(String color) throws Exception{
		if (color.equals("red")) {
			return new RedCar();
		}else if (color.equals("green")){
			return new GreenCar();
		}else {
			System.out.println("对不起我们只能生产红车和绿车,因为只有他俩实现了车的接口");
			throw new UnsupportedAudioFileException();
		}
	}
	
	//test
	public static void main(String[] args) throws Exception {
		CarFactory.greatCar("red").color();;
		CarFactory.greatCar("green").color();
		CarFactory.greatCar("other").color();
	}
}
// 运行结果
我是红色的车
我是绿色的车
对不起我们只能生产红车和绿车,因为只有他俩实现了车的接口
Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException
	at com.shejimoshi.CarFactory.greatCar(CarFactory.java:14)
	at com.shejimoshi.CarFactory.main(CarFactory.java:22)


2.工厂方法模式:在进一步的以面向对象的思想分析,CarFatory是不是也可以看成一个抽象类,由有具体的涂料的工厂实现它,你需要产红车我就用红车的工厂,你产绿车我就用绿车的工厂.

 

public interface CarFactory {
	Car create();
}


public class  GreenFactory implements CarFactory {

    @Override
    public Car create() {
        return new GreenCar();
    }
    
    
}


public class RedFactory implements CarFactory {

    @Override
    public Car create() {
        
        return new RedCar();
    }

}


public class Test {

    public static void main(String[] args) {
        CarFactory carFactory = new RedFactory();//java的多态,父类引用指向子类对象
        Car car = carFactory.create();
        car.color();//控制台输出:我是红色的车        
    }
//在使用工厂方法的时候回创建大量的工厂对象new RedFactory(),占用内存,我们要根据情况,具体选择
}





3.抽象工厂模式

public abstract class AbstractFactory {
    //有多个产品族,例如车,船.等等........
 public abstract Car createCar();
 public abstract Ship createShip();//car ship 均为抽象类
}

public class DefaultFactory extends AbstractFactory{
 @Override
 public Car createCar() {
     return new RedCar();//RedCar 实现了car
 }
 @Override
 public Ship createShip() {
     return new SmallShip();//同理
 }

}

public class Test {
 public static void main(String[] args) {
     AbstractFactory f = new DefaultFactory();
     Car car = f.createCar();
     v.color();
     Ship s  = f.createShip();
     w.run();
 }
}


总结: 简单工厂模式是由一个具体的类(CarFactory)去创建其它类的实例.

         工厂方法模式是有一个抽象的父公共接口,子类负责生成具体的对象,将类的实例延迟到子类操作.

         抽象模式定义一系列的类,可以创建多个方法,可以有有不同的返回值,和方法名,如果只有一个就是工厂方法模式.




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值